二分法查找就是一个数列(有序数列!!!)中找一个数,把这个数和数列最中间那个数做比较,如果值相等,那就是找到了,小于中间那个数的话把就在前半段用同样的方法找,大于的话就在后半段用同样的方法找,直到找到为止。
那咋算找不到呢,所查找的数列段的最高点小于最低点了就算找不到了
有两种方法做二分法查找:用递归和不用递归
先来看看不用递归的方法
function search(arr,key) {
var low=0,
high=arr.length-1; //定义一个最高点和最低点
while (low<=high){ //当最高点大于最低点的时候
var mid=Math.floor((high+low)/2); //挑一个中间数
if (arr[mid]==key){return mid;} //如果中间数等于查找的值,返回这个中间数的位置
else if (arr[mid]<key){
low=mid+1; //中间值小于查找的值的话,将查找的数列段的最低点变成中点+1
}
else if (arr[mid]>key){
high=mid-1; //大于的话最高点变成中点-1
}
else {
return -1; //否则返回-1
}
}
}
再看看用递归的方法
function find(arr,low,high,key) { //开头就得给出这四个值
if (low>high){
return -1; //找不到返回-1
}
var mid=Math.floor((low+high)/2);
if (arr[mid]==key){
return mid;
}
else if (arr[mid]<key){
low=mid+1;
return find(arr,low,high,key); //递归调用
}
else if (arr[mid]>key){
high=mid-1;
return find(arr,low,high,key); //递归调用
}
}