思路:
找到数组的中间数midVal,和你要查找的数(findVal)进行比较,如果midVal > findVal,说明要查找的数(findVal)在数组的左边,就把该数组二分(即只在左边查找)反之,如果midVal < findVal,说明要查找的数在右边。
代码:
<script>
var arr=[1,4,6,8,9,90,800];
function binarySearch(arr,findVal,leftIndex,rightIndex){
//防止无穷递归
if (leftIndex>rightIndex){
//提示找不到
document.writeln('找不到');
return;
}
//找到中间这个值
var midIndex=Math.floor((leftIndex+rightIndex)/2);
//floor() 方法执行的是向下取整计算,它返回的是小于或等于函数参数,并且与之最接近的整数。
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);
}
}
//测试
binarySearch(arr,4,0,arr.length-1);
</script>