数据结构与算法之查找: 二分查找 (Javascript版)

二分查找

  • 折半搜索,是在有序数组中查找每个元素的搜索算法,减而治之
  • 注意:前提是数组有序
  • 思路
    • 从数组中间元素开始,如果中间元素正好是目标值,则搜索结束,返回中间元素下标
    • 如果目标值大于或小于中间元素,则在大于或小于中间元素的那一半进行搜索,搜索方式同上
    • 如果搜到最后,还没有,返回-1

算法实现

Array.prototype.binarySearch = function(val) {
    let low = 0; // 最小下标
    let high = this.length - 1; // 最大下标

    while(low <= high) {
        const mid = Math.floor((low + heigh) / 2);
        const me = this[mid];
        if(me < val) {
            low = mid + 1
        } else if (me > val) {
            high = mid - 1;
        } else {
            return mid;
        }
    }
    return -1
}

let arr = [15,24,33,45,51,51,67,78]
let res1 = arr.seqSearch(51);
let res2 = arr.seqSearch(123);
console.log(res1); //  4
console.log(res2); //  -1

总结

  • 时间复杂度 O(logn)
    • 每次比较,搜索范围缩半
    • 劈成2半的问题都是O(logn)

你可能感兴趣的:(Data,Structure,and,Algorithms,算法,查找,二分查找)