一、四个参数全写版
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 );