二分查找

Posted wssjzw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找相关的知识,希望对你有一定的参考价值。

 一、四个参数全写版

var searchArr = new Array(1,2,3,4,5,6,7,8,9);
//二分查找 找准四个参数 arr---指定的函数  num---查找的数 leftArr---开始的索引 rightArr结束的索引
//Array.prototype是给数组原型链添加方法
Array.prototype.LV_erfen = function LV_erfen(arr,num,leftArr,rightArr){
     //分隔两边的数组序号
     var Center = Math.floor( (leftArr+rightArr)/2 );
     //该序号对应的数组数值
     var arrCenter = arr[Center];
     //防止无限循环
     if( leftArr>rightArr){
         console.log("你好!该数组中没有你想要的值");
         return;
     }
     //根据 分隔序号 对应的 数组值 与 查找数 的比较 决定从哪个方向查找
     if( arrCenter
          //从右边找
          LV_erfen(arr,num,Center+1,rightArr);
     }else if( arrCenter>num ){
          //从左边找
          LV_erfen(arr,num,leftArr,Center-1);
     }else{
          console.log( "数字"+6+"在数组的序号是"+Center );
     }
}
//返回  返回出来的是undefined 原因未知(待改)
console.log( "数字"+6+"在数组的序号是"+searchArr.LV_erfen(searchArr,10,0,searchArr.length-1) );

   二、只写两个参数

Array.prototype.LV_erfen = function LV_erfen(arr,num,leftArr,rightArr){
       leftArr = leftArr||0;
       rightArr = 0?rightArr=0:rightArr=rightArr;
       rightArr = undefined?arr.length-1:false;
       var Center = Math.floor( (leftArr+rightArr)/2 );
       var arrCenter = arr[Center];
       if( leftArr>rightArr){
            console.log("你好!该数组中没有你想要的值");
            return;
       }
       if( arrCenter
            //从右边找
            LV_erfen(arr,num,Center+1,rightArr);
       }else if( arrCenter>num ){
           //从左边找
           LV_erfen(arr,num,leftArr,Center-1);
       }else{
           console.log( "数字"+6+"在数组的序号是"+Center );
       }
}
//两个参数
console.log( "数字"+6+"在数组的序号是"+searchArr.LV_erfen( searchArr,10 );

 

以上是关于二分查找的主要内容,如果未能解决你的问题,请参考以下文章

java 二分查找法

代码题(12)— 二分查找

二分查找代码

PHP实现二分查找算法(代码详解)

「算法笔记」一文摸秃二分查找

C语言二分查找