查找算法-插值查找算法
插值查找算法
- 插值查找原理介绍:
插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找。
- 将折半查找中的求 mid 索引的公式 , low 表示左边索引 left, high 表示右边索引 right. key 就是前面我们讲的 findVal

- int mid = low + (high - low) * (key - arr[low]) / (arr[high] - arr[low]) ;/*插值索引*/
对应前面的代码公式:
int mid = left + (right – left) * (findVal – arr[left]) / (arr[right] – arr[left])
- 举例说明插值查找算法 1-100 的数组

插值查找应用案例:
请对一个有序数组进行插值查找 {1,8, 10, 89, 1000, 1234} ,输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"。
代码实现:
代码实现
package com.xuge.search;
import java.util.Arrays;
/**
* author: yjx
* Date :2022/5/3114:05
**/
public class InertValSearch {
public static void main(String[] args) {
int []arr=new int [100];
for (int i = 0; i < arr.length; i++) {
arr[i]=i+1;
}
System.out.println(Arrays.toString(arr));
System.out.println("=======================");
System.out.println(insertValSearch(arr, 0, arr.length - 1, 1));
}
//编写插值查找算法 要求数组有序
public static int insertValSearch(int []arr,int left,int right,int findVal){
System.out.println("hahha");
//没有找到 必须需要,
if(left>right||findVal<arr[0]||findVal>arr[arr.length-1]){
return -1;
}
//mid索引
int mid=left+(right-left)*(findVal-arr[left])/(arr[right]-arr[left]);
int midVal=arr[mid];
if(findVal>midVal){//向右递归
return insertValSearch(arr,mid+1,right,findVal);
}else if(findVal<midVal){
return insertValSearch(arr,left,mid-1,findVal);
}else{
return mid;
}
}
}

浙公网安备 33010602011771号