基本框架
function binarySearch(arr,target){
let begin = 0;
let end = ###;
while(###){
let mid = ###;
if(arr[mid]==target){ …… ;}
else if(targe<tarr[mid]){ …… ;}
else if(arr[mid]<target){ …… ;}
}
return ###;
}
我认为最好记的框架:
function binarySearch(arr,target){
let begin = 0;
let end = arr.length-1;//相当于搜索区间为[begin, end],这是一个闭区间
while(begin<=end){ //begin>end是跳出条件
let mid = Math.floor((begin+end)/2);
if(arr[mid]==target){
reutrn mid;
}
else if(target<tarr[mid]){
end = mid-1;//因为是闭区间,搜索范围变为[left, mid - 1]
}
else if(arr[mid]<target){
begin = mid+1;//搜索范围变成[mid + 1, end]
}
}
return -1;
}
另一个可以加以理解的框架
function binarySearch(arr,target){
let begin = 0;
let end = arr.length;//相当于搜索区间为[begin, end),这是一个闭开区间
while(begin<end){ /这里begin不能等于end,所以只要begin<end就好
let mid = Math.floor((begin+end)/2);
if(arr[mid]==target){
reutrn mid;
}
else if(target<tarr[mid]){
end = mid;//因为是闭开区间,搜索范围变为[left, mid - 1]
}
else if(arr[mid]<target){
begin = mid+1;//搜索范围变成[mid + 1, end]
}
}
return -1;
}