二分查找针对的是一个有序数列
二分查找的主要思想(分治法):
1. 将要查找的值和中值进行比较
2. 如果查找的值比中值小就在前一段数列中继续同样查找,反之在后一段数列中进行查找
3. 以此类推,直到查找的值和中值相等返回中值下标
给定一个有序数列:arr=[2,5,8,9,12,45,50];
JS 递归实现:
function search(arr,findVal,start,end){
var mid = Math.floor((start+end)/2);
if(arr[mid]===findVal){
return mid;
}
if(arr[mid]>findVal){
return rsearch(arr,findVal,start,mid-1);
}
else {
return search(arr.findVal,mid+1,end);
}
return false;
}
search(arr,9,0,6);
// 3
JS 非递归实现:
function search(arr,findVal){
var start = 0;
var end = arr.length-1;
while(start<=end){
var mid = Math.floor((start+end)/2);
if(arr[mid]===findVal){
return mid;
}
if(arr[mid]>findVal){
end = mid-1;
}else{
start=mid+1;
}
}
return false;
}
console.log(search(arr,8));
// 2