SOURCE

//循环(逻辑清晰)
function binarySearch1 (arr,target){
    if(arr.length ===0) return -1;
    let startIndex =0;
    let endIndex = arr.length-1;
    while(startIndex<=endIndex){
        let midIndex = Math.floor((startIndex+endIndex)/2);
        if(target<arr[midIndex]){
            endIndex = midIndex-1;
        }else if(target > arr[midIndex]){
            startIndex = midIndex+1;
        }else{
            return midIndex;
        }
    }
    return -1;
}

//递归 性能更好
function binarySearch2 (arr,target,startIndex,endIndex){
    if(arr.length ===0) return -1;
    if(startIndex == null) startIndex = 0;
    if(endIndex == null) endIndex = arr.length-1;
    if(startIndex>endIndex) return -1;
    let midIndex = Math.floor((startIndex+endIndex)/2);
    if(target < arr[midIndex]){
       return binarySearch2(arr,target,startIndex,midIndex-1);
    }else if(target > arr[midIndex]){
       return binarySearch2(arr,target,midIndex+1,endIndex);
    }else{
        return midIndex;
    }
}

const arr =[12,45,67,89,100,234];
console.log(binarySearch1(arr,67));
console.log(binarySearch1(arr,234));
console.log(binarySearch2(arr,67));
console.log(binarySearch2(arr,45));



console 命令行工具 X clear

                    
>
console