折半查找思想不多说,google可以搜出来,实现如下(行数比较少而清晰吧),注意用了右移位运算代替/2运算
#include <stdio.h>
#include <stdlib.h>
int binsearch(int k, int a[], int n)
{
int low = 0, high = n - 1, mid;
while(low < high)
{
mid = (low + high) >> 1;
k > a[mid]?(low = mid + 1):(high = mid);
}
return (low <= high)&&(k == a[low])?low:-1;
}
int main(int argc, char *argv[])
{
int a[] = {1,2,3,4,5,6,7,8,9,10};
printf("%d/n", binsearch(5, a, sizeof(a)/sizeof(a[0])));
system("PAUSE");
return 0;
}