算法-查找-插值查找

算法来源

    对于插值查找,就是对于二分查找的优化,将二分查找中的mid = (low + high) / 2改为mid = low + (high - low) * (key - a[low]) / (a[high] - a[low])。插值查找是根据查找关键子key与查找表中最大最小记录关键字比较后的查找方法,核心在于插值计算公式(key-a[low])/(a[high] - a[low])。

算法分析

    时间复杂度依旧为O(logn)。

    对于表长较大,而关键字分部比较均匀的查找表来说,平均性能要比折半好很多。

    如果数组中的分部类似{1,100,200,1000,10000...10000}这种极端不均匀的数据,用插值法也不太合适。

javaScript:

function search(arr, key, left, right){

    while(left < right){

        if(arr[left] == key){

            return left

        }

        if(arr[right] == key){

            return right

        }

        let middle = left + (right-left)*((key-arr[left])/(arr[right]-arr[left]))

        middle = Math.floor(middle)

        if(arr[middle] == key){

            return middle

        }

        if(key < arr[middle]){

            return search(arr, key, left, middle-1)

        } else {

            return search(arr, key, middle+1, right)

        }

    }

    return -1

}


let arr1 = [0, 9, 11, 39, 68, 88, 101]

console.log(search(arr1, 88, 0, arr1.length-1))

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,881评论 0 33
  • 排序算法说明 (1)排序的定义:对一序列对象根据某个关键字进行排序; 输入:n个数:a1,a2,a3,…,an 输...
    code武阅读 737评论 0 0
  • 原文出处:http://www.cnblogs.com/maybe2030/p/4715035.html引文出处:...
    明教de教主阅读 9,303评论 0 7
  • 我给自己打着节拍 这是我生命中美好的时刻 我要完成我最喜欢的舞蹈 在这美丽的月光下在这美丽的街道上 我告诉自己这是...
    AI大叔阅读 286评论 1 0
  • 01 下面两则信息,你认为哪一个更能博得人们的眼球? 1.狗把一个人给咬了。 2.人把一条狗给咬了。 很明显,第二...
    萧筱筱阅读 567评论 5 10

友情链接更多精彩内容