折半查找与插值查找

思想

在一个有序表中,先取中间的值,如果比要查找的值大,去左半边查;比要查找的值小去右半边查

代码

int BinarySearch(int* a, int key, int length)
{
    int start, end, mid;
    start = 0;
    end = length - 1;
    while(start <= end)
    {
        mid = (end + start) / 2;
        if(key < a[mid])
            end = mid - 1;
        else if(key > a[mid])
            start = mid + 1;
        else
            return mid;
    }
    return 0;
}

改进思想

当对于表比较长而且数值分布均匀的查找表来说,折半查找还可以继续改进,即mid的计算可以用mid = start + (end - start) * (key - a[start]) / (a[end] - a[start]) 来代替,这个公式实际上直接根据比例来定位要查找的关键字的位置,如果要查找的表的数据极端不均匀,则这个公式未必有好的效果,这就是插值查找

猜你喜欢

转载自blog.csdn.net/wzc2608/article/details/79898881
今日推荐