3.插值查找
3.1.原理
算法的本身仍然基于二分查找,在选定中值的时候做出了改进,我们假定了所查找序列是均匀随机分布的,于是又有以下关系
上面的关系是,中点与区间长度的比(秩的比)约等于他们对应值的比。
1 #include "pch.h"
2 #include <iostream>
3
4 int InterpolationSearch(int *data, int length, int serch_value) {
5 int hi, lo, mid;
6 hi = length;
7 lo = 0; //左闭右开的假定
8 while (lo<=hi)
9 {
10 mid = lo + ((hi - lo)*(serch_value - data[lo])) / (data[hi] - data[lo]);
11 if (serch_value < data[mid]) {
12 hi = mid-1;
13 }
14 if (data[mid] < serch_value) {
15 lo = mid+1;
16 }
17 else
18 {
19 return mid;
20 }
21 }
22 return 0;
23
24 }
25
26 int main() {
27 int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
28 int value=InterpolationSearch(arr, 10, 10);
29 std::cout << value;
30 }