插值查找
前提:有序数组
数组arr={1,2,3,...100}
假设查找1,使用二分查找的话,我们需要多少次递归,才能找到1
使用插值查找算法
int mid=left+(right-left)*(findVal-arr[left])/(arr[right]-arr[left]) //left和right代表索引
注意:对于数据量较大,关键字(数组元素)分布比较均匀的查找表来说,采用插值查找,速度较快
关键字分布不均匀的情况下,该方法不一定比折半查找好
//插值查找
public class InsertValueSearch {
public static void main(String[] args) {
int[]arr=new int[100];
for (int i = 0; i < 100; i++) {
arr[i]=i+1;
}
int index=insertValueSearch(arr,0,arr.length-1,78);
System.out.println("index="+index);
}
public static int insertValueSearch(int[]arr,int left,int right,int findVal){
//注意
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]);
return mid;
}
}