二分查找

二分查找的前提必须是有序表顺序存储,当其是静态的时候(经过一次排序后不再变化数据)效率是可观的。
思想:从中间元素开始比较,若相等则返回元素位置;若不相等则与中间元素比较大小,根据大小关系和表的排序方式确定下一次要查找的部分,依次递归执行,直到查找到结果返回元素位置或者查找结束发现无此元素返回-1。
对于n个元素查找
最好情况:1次,
最坏情况
当n=1时,次数为1
当n>1时,次数为Math.ceil(log2n)

时间复杂度为:O(log2n)

优点:比较次数较少,查找速度快,平均性能好
缺点:必须是有序表
JS代码如下

function search (arr, num) {
    var index = -1;
    var left = 0,
          right = arr.length-1;
    while(left < right){
        var middle = parseInt((left+right)/2)
        if (num == arr[middle]) {
            index = middle;
            return index;
        } else if (num > arr[middle]) {
              left = middle+1;
        } else {
              right = middle;
        }
    }
    return index;
}
testing:
var a = [2,4,7,10,11,14,15,19,21,23,27]
console.log(search(a,2))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容