插值查找算法概述
插值查找算法,是二分法查找算法的改进。将查找点的选择改为自适应选择,可以提高查找效率。
算法注意点和二分法查找一样,都需要列表先排好序。
插值查找算法实现
1、golang实现
package main
import (
"fmt"
)
func InsertionSearch(values []int, key int) int {
if len(values) == 0 || key > values[len(values)-1] || key < values[0] {
return -1
}
front := 0
end := len(values) - 1
mid := front + ((key-values[front])/(values[end]-values[front]))*(end-front)
for front < end && values[mid] != key {
if values[mid] > key {
end = mid - 1
} else {
front = mid + 1
}
mid = front + ((key-values[front])/(values[end]-values[front]))*(end-front)
if mid > end {
mid = end
}
}
if values[mid] == key {
return mid
}
return -1
}
func main() {
values := []int{1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39}
fmt.Println(values)
index := InsertionSearch(values, 1)
fmt.Println(index)
index = InsertionSearch(values, 35)
fmt.Println(index)
return
}
结果
[1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39]
0
17