思想
- 差值查找算法是对【算法】二分查找(折半查找)的一个优化。
- 二分查找算法选取的是中间位置:mid = (low + high)/2
- 插值查找算法选取的是自适应mid位置开始查找: mid= low + (key - a[low])(high - low)/(a[high] - a[low])
使用场景
- 插值查找算法通过上面计算的mid,可以判断你要查找的位置大概在哪里,对于表较长,且关键字分布比较均匀时候,查找比较快。
- 关键字分布不均匀的情况下,该方法不一定比折半查找要好
代码
public class Binary {
public static int binarySearch(int[] arr,int left,int right,int findVal){
// findVal <arr[0] || findVal> arr[arr.length -1]
// 防止mid越界
if (left > right || findVal <arr[0] || findVal> arr[arr.length -1]){
return -1;
}
// 二分查找
// int mid = (left + right) /2;
// 插值查找
int mid = left + (right - left)*(findVal - arr[left])/(arr[right] - arr[left]);
i