折半查找:
在按从小到大顺序的数组中。先查找中间的元素,将中间的元素与要查找的元素作比较。如果要查找的元素比中间元素大,则用右面一半的元素再进行折半查找(递归);如果要查找的元素比中间元素小,则用左面一半的元素再进行折半查找。直至找到元素或者没有元素可找为止。
代码:
#include <stdio.h>
//参数分别为:返回-1(没找到)或者元素下标(找到)bin_find(数组首地址,
//第一个下标,最后一个下标,要查找的元素)
int bin_find(int* pa, int low, int high, int key)
{
int tmp = (low + high)/2;
if(low > high )
return -1;
else {
if(key > pa[tmp])
return bin_find(pa, tmp+1, high, key);
else if(key < pa[tmp])
return bin_find(pa, low, tmp-1, key);
else
return tmp;
}
}
int main()
{
int a[9] = {13, 20, 23, 28, 30, 34, 50, 60, 99};
int ret = bin_find(a, 0, 8, 34);
if(ret < 0){
printf("not found. \n");
return -1;
}
printf("a[%d]: %d\n",ret, a[ret]);
return 0;
}
结果: