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 }

 

posted @ 2019-06-22 11:00  Royzzzzz  阅读(278)  评论(0编辑  收藏  举报