折半查找的算法思想:
折半查找又称二分查找,它仅仅适用于有序的顺表。
折半查找的基本思想:首先将给定值key与表中中间位置的元素(mid的指向元素)比较。mid=low+high/2(向下取整)
- 若key与中间元素相等,则查找成功,返回该元素的存储位置,即mid;
- 若key与中间元素不相等,则所需查找的元素只能在中间元素以外的前半部分或后半部分。(至于是前半部分还是后半部分要看key与mid所指向元素的大小关系)
a.在查找表升序排列的情况下,若给定值key大于中间元素则所查找的元素只可能在后半部分。此时让low=mid+1;
b.若给定值key小于中间元素则所查找的元素只可能在前半部分。此时让high=mid-1;
cpp
#include<stdio.h>
//折半查找 主要方法
int Binary_search(int *array,int length,int key){
int low=1,high=length,mid; //如果不浪费空间 则low=0;high=length-1
while(low<=high){ //退出循环条件为low>high
mid=(low+high)/2;
if(array[mid] == key) return mid;
else if(array[mid]>key) high=mid-1;
else low = mid+1;
}
return -1;
}
int main(){
int a[16]={0},key,temp;//浪费一个空间即下标0 用于对齐 下标
printf("请输入15个有序数字:\n");
for(int i=1;i<=15;i++)
scanf("%d",&a[i]);
printf("请输入所要查找的数字:\n");
scanf("%d",&key);
temp=Binary_search(a,15,key);
if(temp==-1)
printf("不存在\n");
else
printf("下标为%d\n",temp);
return 0;
}