递归
1 找到中间值
2 比较key和中间值,key小往左递归,key大往右递归
3 递归停止条件,等于则返回下标;开始下标大于结束则返回-1
function binarySearch(arr, key, start, end){
if(start>end) return -1;
var m = Math.ceil((start+end)/2);
if(arr[m] == key){
return m;
}
if(key < arr[m]){
return binarySearch(arr, key, 0, m-1);
}
else if(key > arr[m]){
return binarySearch(arr, key, m+1, arr.length-1)
}
}
var arr = [1,2,3,4,5];
console.log(binarySearch(arr, 6, 0, arr.length-1));
非递归
function binarySearch(arr, key){
var start = 0;
var end = arr.length-1;
var m = 0;
while(start<=end){
m = Math.ceil((start + end)/2);
if(key == arr[m]){
return m;
}
else if(key < arr[m]){
end = m - 1;
}else if(key > arr[m]){
start = m + 1;
}
}
return -1;
}
var arr = [1,2,3,4,5];
console.log(binarySearch(arr, 6, 0, arr.length-1));