1-插值查找
插值查找算法是对二分查找的升级做法,具体做法是
二分查找与插值查找:
修改了计算mid中间索引的公式
2-插值查找的Java实现
package select;
/**
* 插值查找
*/
public class InsertValueSearch {
public static void main(String[] args) {
int arr[] = {1, 8, 10, 89, 1000, 1000, 1234};
int i = insertValueSearch(arr, 1000, 0, arr.length - 1);
System.out.println("找到了,元素下标为:"+ i);
}
// || 代表或
public static int insertValueSearch(int[] arr, int keyValue, int left, int right) {
/**
* 三个条件有一个为真则跳出循环:
* 1.keyValue大于最大值
* 2.keyValue小于最小值
* 3.左索引大于右索引
*/
if (keyValue > arr[arr.length - 1] || keyValue < arr[0] || left > right) {
return -1;
}
// 原始mid计算方法:mid = (left + right) / 2;
// 修改mid计算方法
int mid = left + (keyValue - arr[left]) * (right - left) / (arr[right] - arr[left]);
if (keyValue > arr[mid]) {
return insertValueSearch(arr, keyValue, mid + 1, right); // 如果右边大,向右递归
} else if (keyValue < arr[mid]) {
return insertValueSearch(arr, keyValue, left, mid - 1);
}
return mid;
}
}