思路:找到数组中间数,和你要找的数进行比较,如果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);