- 插值查找简介
- 实现(java)
- 时间复杂度
1.插值查找简介
- 有序表插值, 与自适应中间元素比较, 比中间元素小, 在左半区域查找, 比中间元素大, 在右半区域查找
- 数组必须有序
2.实现(java)
public class InsertSearch {
public static void main(String[] args) {
int[] arr = {5, 19, 21, 35, 40, 52, 63, 77, 82, 96};
int index = search(arr, 82);
if(-1 != index) {
System.out.println("查询成功, 元素位于数组第" + (index + 1) + "位");
}else {
System.out.println("查询失败");
}
}
public static int search(int[] arr, int key) {
int low = 0;
int high = arr.length - 1;
while (low <= high) {
int mid = low + (key - arr[low]) * (high - low) / (arr[high] - arr[low]);
if(key < arr[mid]) {
high = mid - 1;
}else if(key > arr[mid]) {
low = mid + 1;
}else {
return mid;
}
}
return -1;
}
}
3.时间复杂度
时间复杂度为O(log2n)