二分查找
/*
前提:数组为一个有序数组
二分查找:传入数组,要查找的值,数组的左边界,数组的右边界
返回查找值的下标。
如果左边界小于等于右边界,则查找可进行下去,否则退出,查无此值
取一个中间点mid为左边界下标加右边界下标的和除以二向下取整
如果中间点mid对应的值大于查找值
就向右边递归查找,反之向左边递归查找,直到退出查找
*/
function BinarySearch(arr, p, left, right) {
if (left <= right) {
let mid = (left + right) >> 1;
if(arr[mid] > p){
return BinarySearch(arr,p,left,mid-1);
}else if(arr[mid] < p){
return BinarySearch(arr,p,mid+1,right);
}else{
return mid;
}
}else{
return -1;
}
}
let arr = [-4,-1,5,9,11,23,29,31];
let pos = BinarySearch(arr,-1,0,arr.length-1);
console.log(pos);//1