JavaScript实现二分查找

思路:找到数组中间数,和你要找的数进行比较,如果midVal>findVal则说明要查找的数在数组的左半部分,就把该数组二分,只从左边找(递归)


var arr=[1,4,6,8,12,45];
function binarySearch(arr,findVal,leftIndex,rightIndex){

  //防止无穷递归
  if(leftIndex>rightIndex){
    document.writeln("找不到");
    return;
  }

  //找到中间这个值
 // var midVal=arr[Math.floor((leftIndex+rightIndex)/2)];//用于下取整
 var midIndex=Math.floor((leftIndex+rightIndex)/2);
 var midVal=arr[midIndex];
  //比较
  if(midVal>findVal){
    //在左边找
    binarySearch(arr,findVal,leftIndex,midIndex-1);//递归查找
  }else if(midVal<findVal){
    //在右面找
    binarySearch(arr,findVal,midIndex+1,rightIndex);
  }else{
    document.writeln("找到下标为"+midIndex);
    return;
  }

}

//测试,调用函数
binarySearch(arr,8,0,arr.length-1);

posted @ 2016-04-23 10:57  安静的嘶吼  阅读(215)  评论(0编辑  收藏  举报