ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【JS】查找与二分查找

2022-06-02 09:00:57  阅读:124  来源: 互联网

标签:二分 arr console log mid 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。

标签:二分,arr,console,log,mid,JS,索引,查找
来源: https://www.cnblogs.com/redcode/p/16336516.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有