折半查找是在查找元素有序的情况下,一种很好的查找方法。
我们计算原始数据的个数n,这样我们就可以计算出中间mid = (1+n)/2
下面我们就看要查找的值key跟中间mid位的值即a[mid]进行比较,如果key>a[mid],则说明要查找的元素在后半部分,则把上面的1换成mid+1,如果key<a[mid],则说明要查找的元素在前半部分,则将上述最高位n缓冲mid-1,如果key=a[mid]则说明已经找到该元素。依次上述一直到找到元素位置,找不到则返回0.
具体的代码如下:
#include <stdio.h>
int binarySearch(int a[],int n,int key);
int binarySearch(int a[],int n,int key)
{
int low,high,mid;
low = 1;
high = n;
while(low<=high)
{
mid = (low+high)/2;
if(key<a[mid])
high = mid -1;
else if(key>a[mid])
low = mid+1;
else
return mid;
}
return 0;
}
int main(void)
{
int result;
int a[10] = {1,3,7,9,10,12,14,16,43,56};
result = binarySearch(a,10,43);
printf("binary %d ",result);
return 0;
}