03插值查找

48 阅读1分钟

03插值查找

基本思想:在折半查找的思想基础上,让mid的取值基于最大值和最小值来取得。
讲解:
    //创建一个名为Interpolation_search的方法,传入数组a及其大小n,查找值key
    public static int Interpolation_search(int a[],int n,int key){
        //设置左边界low初始值为0,右边界high初始值为n - 1
        int low = 0,high = n - 1;
        //while循环条件:左边界始终不超过右边界
        while(low <= high){
            //记录中间位置变量mid为:
            //首先用(查找值key - 左边界值a[low]) 乘以 (右边界high - 左边界low)
            //然后 除以 (右边界值a[high] - 左边界值a[low])
            //最后加上左边界下标low
            int mid = (key - a[low]) * (high - low) / (a[high] - a[low]) + low;
            //以下和折半查找的思想一致,不再重述
            if(key < a[mid]){
                high = mid - 1;
            }else if(key > a[mid]){
                low = mid + 1;
            }else{
                return mid;
            }
        }
        return -1;
    }