插值查找算法:
原理:
1.插值查找算法类似于二分查找,不同的是插值查找每次从自适应mid处开始查找
2.求mid索引的公式:low表示左边索引left,high表示右边索引right,key就是前面我们将的findvalue
mid=(low+high)/2=low+(high-low)/2
变成
mid=low+(high-low)*(key-a[low])/(a[high]-a[low])
mid=left+(right-left)*(findvalue-a[left])/(a[right]-a[left])
代码实现:
public static int insertserach(int[] arr,int left,int right,int findvalue) {
System.out.println("查找了几次");
//退出条件,不在值域范围退出
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 insertserach(arr, mid + 1, right, findvalue);
} else if (findvalue < arr[mid]) {//左递归
return insertserach(arr, left, mid - 1, findvalue);
} else {
return mid;
}
}