二分法查找的前提是数据是有序的,时间复杂度是O(log2n)
没有什么难点,写的太多了,直接上代码:
#include <stdio.h>
int BSearch(int a[], int x, int low, int high)
{
if(low < high)
return -1;
int mid = (low+high)/2;
if(x==a[mid]) return mid;
else if(x<a[mid])
return BSearch(a, x, low, mid);
else
return BSearch(a, x, mid+1, high);
}
void main()
{
int a[] = {1,3,4,5,6,2};
int x = 4;
int bn = BSearch(a, x, 0, 6);
if(bn)
printf("finded\n");
}
非递归实现也很简单:
int binary_search(int a[], int l, int r, int x)
{
int mid = (l + r)/2;
while(l <= r && a[mid] != x)
{
if(a[mid] < x)
l = mid+1;
else if(a[mid] > x)
r = mid-1;
mid = (l+r)/2;
}
if(x == a[mid]);
{
printf("the num is in the position:%d\n",mid);
return mid;
}
return -1;
}