核心思想:对于一个有序数组,求mid的公式为:
mid=(high-low)*(findVal-arr[low])/(arr[high]-arr[low]);
代码实现:
public class InterpolationSearch {
private static int interpolationSearch(int[] arr,int findVal){
int low=0;
int high=arr.length-1;
int mid=0;
while(low<=high){
mid=(high-low)*(findVal-arr[low])/(arr[high]-arr[low]);
if(findVal>arr[mid]){
low=mid+1;
}else if(findVal<arr[mid]){
high=mid-1;
}else{
return mid;
}
}
return -1;
}
public static void main(String[] args) {
int[] arr=new int[]{1,2,3,4,5,6,7,8,9};
int target=interpolationSearch(arr,3);
System.out.println(target);
}
}