折半查找是在查找元素有序的情况下,一种很好的查找方法。
我们计算原始数据的个数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; }