二分搜索——即在有序数组中查找指定元素的数值。
具体算法流程见code
#include <stdio.h>
binarySearch(int a[], int n, int key){
int low = 0;
int high = n - 1;
while(low<= high){ //当数组下标的low>high时,说明该数组已比对完,但未找到key
int mid = (low + high)/2; //每次让mid变为low+high的中间值 int默认取下整数
int midVal = a[mid]; //例如(3+4)/2 =3
if(midVal<key)
low = mid + 1; //若key>midval,则说明在有序数组中,key介于mid-high之间
//故令low = mid+1; 以下同理
else if(midVal>key)
high = mid - 1;
else
return mid;
}
return -1;
}
int main(){
int i, val, ret;
int a[8]={-32, 12, 16, 24, 36, 45, 59, 98};//有序数组
for(i=0; i<8; i++)
printf("%d\t", a[i]); //遍历打印
printf("\n请输人所要查找的元素:");
scanf("%d",&val);
ret = binarySearch(a,8,val);
//调用二分搜索算法,返回-1或其他值 主要判断能否找到该数值
//这里的ret代表的是指定元素数组的下标
if(-1 == ret)
printf("查找失败 \n");
else
printf ("查找成功 \n");
printf("该数值为%d\n",a[ret]);//同时打印出该数值
return 0;
}