/** *在二分查找的基础上,进行查找,也需要数组是有序的 *插值查找最核心的就是一个公式,也是为了提高二分查找的效率提出的, *int mid=left+(right-left)*(findVal-arr[left])/(arr[right]-arr[left]) */ public static void main(String[] args){ int[] arr=new int[100]; for(int i=0;i<100;i++){ arr[i]=i+1; } int index=insertSearch(arr,0,arr.length-1,1); } //编写插值查找算法 public static int insertSearch(int[] arr,int left,int right,int findVal){ //注意:这里的判断必须需要,否则容易造成mid越界 if(lefg>right||findVal<arr[0]||findVal>arr[arr.length-1]){ return -1; } //找到这个值的下标 int mid=left+(right-left)*(findVal-arr[left])/(arr[right]-arr[left]); //如果上面没有判断,在这里可能会造成数组越界,记住 int midVal=arr[mid]; //下面的判断就和二分一样了,所以,最重要的就是上面的这个公式 if(findVal>midVal){ return insertSearch(arr,mid+1,right,findVal); }else if(findVal<midVal){ return insertSearch(arr,left,mid-1,findVal); }else{ return mid; } }