跳到主要内容

插值查找

介绍

插值查找.插值查找的思想:基于数组的有序性,从数组开头开始查找,根据插值公式 $\frac{value - array[start]} {array[end] - array[start]}$ ,将要查找的关键字 value 与 查找数组中的最大、最小记录的关键字比较的查找方法

特点:

  • 中间索引值公式:middle = start + $\frac{value - array[start]} {array[end] - array[start]}$ * (end - start)

实现

/**
* @description: [start,end] 查找 value

1. 首先确定 array 自适应插值索引 middle:

middle = start + (end - start) * (value - array[start]) / (array[end] - array[start])

2.

3.
*/

function InsertionSearch(array, start, end, value) {
if (start > end || value < array[start] || value > array[end]) {
return -1;
}
let middle =
start +
((value - array[start]) * (end - start)) /
(array[end] - array[start]);
let middleValue = array[middle];
if (value > middleValue) {
return InsertionSearch(array, middle + 1, end, value);
} else if (value < middleValue) {
return InsertionSearch(array, start, middle - 1, value);
} else {
return middle;
}
}

const array = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100];
console.log(InsertionSearch(array, 0, array.length - 1, 80));
console.log(array[InsertionSearch(array, 0, array.length - 1, 80)]);