【JS小白】查找与二分查找

1查找

查找可以分为:

  • 有序查找(数组正序、倒序)

  • 随机查找(索引不是有序递增或递减的,需要计算下一个索引,可能是跳来跳去的索引)。

1.1有序查找

有序查找时,简单的话只用一个for循环就能解决问题。

function sequenceSearch(arr, item){
    for(let i = 0; i < arr.length; i++){
        if(arr[i] === item){
            return i;
        }
    }
    return -1;
}

可以索引从0往后递增查找,也可以倒着来。

1.2随机查找

1.2.1二分查找

找到就返回基于0的索引,找不到就返回-1

function binarySearch(array, element){
    var low = 0;
    var hig = array.length - 1;
    // console.log(mid);//变量提升了
    while(low <= hig){
        var mid = Math.floor((low + hig) / 2);//注意js需要显式转化为整数
        if(element === array[mid]){
            return mid;
        }
        else if(element > array[mid]){
            low = mid + 1;//注意是mid,而不是low
        }else{
            hig = mid - 1;//注意是mid,而不是hig
        }
    }
    // console.log(mid);
    return -1;
}

注意点:

  1. 两个数相加除以2,得到的不一定是整数,需要显式向下取整。
//关于整数的问题
let a = 3 / 2
console.log(a);//得到1.5,而非1
console.log(Math.floor(a));//1
console.log(Math.ceil(a));//2

Math是内置函数,可以直接使用,不需要引入依赖。

  1. while的条件是left小于等于right,不能只是小于。

  2. left初始值为0,right初始值为最后一个元素的索引,记得arr.length-1。

posted @ 2022-06-02 08:53  greencode  阅读(44)  评论(0编辑  收藏  举报