前端算法:顺序查找之二分法查找

顺序查找之二分法查找:

二分法查找算法思想:
    1.二分法查找算法:数据是需要有序排列的:比如升序排列/降序排列的数据;
    2.主要思想:
        1.设置查找的数据区间array[start,end];
        2.确定该区间的中间位置index:m;
        3.假设查找值为T(target);
        4.如果T与array[m]相等,则查找成功,返回此位置;
        5.否则确定新的查找范围,继续二分查找;
        举例:升序排列的数据arrInc[start,end];
        如果arrInc[m]>T;由于数组的有序性,arrInc[m,....e]>T;
        因此新的查找区间是arrInc[s,m-1];
        ,每次查找都与中间值比较,判断是否成功,不成功,则当前查找区间缩小一半;
        时间复杂度O(log2n);
复制代码

talk is cheap ,show me the code:

    // 二分查找
    Array.prototype.binarySearch=function(arrObj,target){
        let s=0,
            e=arrObj.length-1,
            m=Math.floor((s+e)/2),
            sortFlag=arrObj[s]<=arrObj[e];// 申明排列顺序;
            // 通过while循环判断
            while(s<e && arrObj[m]!==target) {
                 if(arrObj[m]>target){
                     // 如果是升序,则e=m-1;
                     sortFlag&&(e=m-1);
                     // 如果是降序,则s=m+1
                     !sortFlag&&(s=m+1);
                 }else{
                     //如果是升序则s=m+1
                     sortFlag&&(s=m+1);
                     // 如果是降序,e=m-1
                     !sortFlag&&(e=m-1);
                 }    
            }// end of while loop;
            
         if(arrObj[m]==target){
             console.log(m,arrObj[m]);
             return m;
         }else{
            console.log("the target not found!");
             return -1;
         }
         
    }复制代码

转载于:https://juejin.im/post/5cbe756ff265da037b6111a8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值