插值查找
- 插值查找原理介绍: 插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找。
- 将折半查找中的求 mid 索引的公式 ,low 表示左边索引 left,high 表示右边索引 right. key 就是上一篇的findVal
- intmid=low+(high-low)(key-arr[low])/(arr[high]-arr[low]) ;/插值索引/
对应前面的代码公式: intmid=left+(right – left)(findVal – arr[left])/(arr[right] – arr[left])
![在这里插入图片描述]()
注意该算法也需要是有序数组才能查找
具体实现如下:
public static int insertValueSerach(int[] arr, int left, int right, int findvalue) {
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]);
int midval = arr[mid];
if (findvalue > midval) {
return insertValueSerach(arr, mid + 1, right, findvalue);
} else if (findvalue < midval) {
return insertValueSerach(arr, left, mid - 1, findvalue);
} else {
return mid;
}
}
![在这里插入图片描述]()