折半查找

折半查找是在查找元素有序的情况下,一种很好的查找方法。

我们计算原始数据的个数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;
}
原文地址:https://www.cnblogs.com/fengbing/p/3582296.html