对半查找思想:
在数组中查找一个数值的方法之一就是逐个搜索数组元素,当数组长度很小时这种顺序查找是可以接受的,但是要循环查找一个大数组时是很浪费时间的。如果程序已经对数据元素进行了由大到小或者是由小到大的排序时,就可以通过折半查找来定位数组中的元素。
对半查找实现:
下面代码实现的前提是数组元素是由小到大排序的数组。
int binary_search(int arry[], int value, int size);<:o:p>
int main()
{
int arry[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
binary_search(arry,2,16);
getchar();
}
int binary_search(int arry[], int value, int size)
{
int found = 0;
int low = 0;
int high = size;
int mid = (low + high)/2;
printf("find the number %d.../n",value);
while((!found) && (low < high))
{
printf("Low %d Mid %d High %d/n",low,mid,high);
if(value == arry[mid])
{
found = true;
printf("found!/n");
}
if((value > arry[low]) && value < arry[mid])
high = mid -1;
else
low = mid +1;
mid = (low + high)/2;
}
return ((found) ?mid:-1);
}
结果输出:find the number 2...
Low 0 Mid 8 High 16
Low 0 Mid 3 High 7
Low 0 Mid 1 High 2
found!