二分法查找,前提是被搜索的数组是有序排列的。通过不断缩小数组的搜索范围(每次折半)来实现高效的搜索。
代码如下:
//二分法查找,前提待搜寻数组有序
#include <stdio.h>
#define M 14
int BINARYSEARCH(int *num,int x);
int main(void)
{
int num[M]={1,4,5,7,8,9,10,12,15,22,23,27,32,35};
printf("%d\n",BINARYSEARCH(num,22));
return 0;
}
int BINARYSEARCH(int *num,int x)
{
int low = 0,high = M-1,mid=0,j=0;
while(low<=high&&j==0)
{
mid = (low+high)/2;
if(num[mid]==x) j=mid;
else if(num[mid]<x) low = mid+1;
else high = mid-1;
}
return j;
}
分析:对于一个大小为n的排序数组,算法执行比较的最大次数是(log(n)+1);