二分查找是有序列表算法的一个基本思想,特别是针对于大数据量的有序列表,效率和时间复杂度要明显优于线性查找,下面是用js实现的二分查找:
function binarySearch(arr,target){
let startIndex = 0;
let endIndex = arr.length-1;
if(!endIndex){//若长度为0 则return
return -1;
}
if(endIndex==0){//若长度为1 则返回0
return 0;
}
if(endIndex==1){//若长度为2 则通过三目运算符返回
return arr[startIndex]<target ? 1:0;
}
while(startIndex<=endIndex){
let intermediateIndex = Math.ceil((startIndex+endIndex)/2);//中间索引值
if(arr[intermediateIndex]>target){//若中间项大于目标值 则取前部分查找
endIndex = intermediateIndex-1;
}else if(arr[intermediateIndex]<target){//若中间项小于目标值 则取后部分查找
startIndex = intermediateIndex+1;
}else{ //若中间项等于目标值 则返回中间索引
return intermediateIndex;
}
}
}