学习对分查找与顺序查找后,我们会发现对分查找的效率要高很多,对比100000的数据,顺序查找最糟糕的情况要查找10000次,而对分查找只需查找:int(log(100000))+1(即17次),但是我们会发现查字典,如查单词:art,并不是从26个英文字母的中间字母查起的,既然对分查找效率这么高,为什么不用的,这里就涉及到今天我们讲的插值查找,是在对分查找基础上的一种优化,本身代码与对分查找极其相似
插值查找(Interpolation Search)是根据要查找关键字key与查找表中最大最小记录的关键字比较后的查找方法,其核心就在于插值的计算公式:key-arr[low]/arr[high]-arr[low]
换形为mid的计算公式为:(high-low)*(key-arr[low])/(arr[high]-arr[low])
其代码如下:
Private Sub Interpolation_Search(length , key)
low = 1: high = length
Do While i <= j
m = (high-low) * (key-arr(low))/ (arr(high)-arr(low))
If arr(m) = Key Then
Label1.Caption = Str(m)
Exit Do
ElseIf Key < a(m) Then
high = m - 1
Else
low = m + 1
End If
Loop
End Sub
插值查找相对于对分查找共数组分布较均匀则效率高,反之效率低!