学习回顾算法(插值查找算法)

来源:互联网 发布:centos 离线安装mysql 编辑:程序博客网 时间:2024/05/01 08:07

插值查找算法概述

插值查找算法,是二分法查找算法的改进。将查找点的选择改为自适应选择,可以提高查找效率。
算法注意点和二分法查找一样,都需要列表先排好序。

插值查找算法实现

1、golang实现

package mainimport (    "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]017
原创粉丝点击