一、插值查找
- 主要思想:根据要查找的关键字key与查找表中最大最小记录的值比较的查找方法。
- 特点:
a. 比较适合分布均匀的查找。如果有序序列不满足均匀分布的特征,则插值查找算法的查找效率不如二分查找算法
b. 与折半查找思想类似。唯一的区别在于,每次与目标元素做比较的元素并非搜索区域内的中间元素,而是根据公式按比例计算出的值 m i d = l o w + k e y − a [ l o w ] a [ h i g h ] − a [ l o w ] ∗ ( h i g h − l o w ) mid ={ low+{ {key-a[low]}\over{a[high]-a[low]} }* (high-low)} mid=low+a[high]−a[low]key−a[low]∗(high−low)int InsertionSearch(int a[], int value, int low, int high) { int mid = low+(value-a[low])/(a[high]-a[low])*(high-low); if(a[mid]==value) return mid; if(a[mid]>value) return InsertionSearch(a, value, low, mid-1); if(a[mid]<value) return InsertionSearch(a, value, mid+1, high); }
二、斐波那契查找
- 主要思想:同样来源于折半查找的延伸,mid的取值不是从中位取,大概是通过斐波那契数列得到在原始数据的0.618位置。要查找元素为key,a为查找数组,low为查找下界,high为查找上界,mid为根据斐波那契数列计算出的值: m i d = l o w + F [