8.4插值查找

若二分查找【1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16】查找数字1,需要查找多次。

在这里插入图片描述
在这里插入图片描述
比较二分查找:数据多时,定位比较快。

package search;

public class InsertValueSearch {
    
    

    public static void main(String[] args){
    
    
        int[] arr = new int[100];
        for (int i=0;i<100;i++){
    
    
            arr[i] = i+1;
        }
        int i = InsertValueSearch(arr, 0, arr.length - 1, 2);
        System.out.println(i);
    }

    public static int InsertValueSearch(int[] arr,int left,int right,int findValue){
    
    

        //findValue<arr[0] ||findValue>arr[arr.length-1] 必须需要,否则mid越界
        if (left>right ||findValue<arr[0] ||findValue>arr[arr.length-1]){
    
    
            return -1;
        }

        int mid = left + (right-left)*(findValue-arr[left])/(arr[right]-arr[left]);

        if (findValue>arr[mid]){
    
    
            return InsertValueSearch(arr,mid+1,right,findValue);
        }else if (findValue<arr[mid]){
    
    
            return InsertValueSearch(arr,left,mid-1,findValue);
        }else {
    
    
            return mid;
        }
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41997237/article/details/116188128
今日推荐