SOURCE

/**
 * 二分查找
 * @param arr 查找的数组
 * @param target 查找的数据
 * @param start 数组的开始位置
 * @param end 数组的末尾位置
 * @returns {number}
 */
let num = 0
const binarySearch = function (arr,target,start,end) {
    num++
    let targetPosition = -1;
    // 计算中间值
    const median = Math.floor((start + end) / 2);
    // 判断中间值与目标值是否相等
    if(arr[median] === target){
        targetPosition = median;
        return targetPosition;
    }
    // 未找到
    if(start >= end){
        return targetPosition;
    }
    // 判断中间值是否大于目标值
    if(arr[median] > target){
        // 递归中间值左侧的数组
        return binarySearch(arr,target,start,median - 1)
    }else{
        // 递归中间值右侧的数组
        return binarySearch(arr,target, median + 1, end);
    }
};

let dataArr = [];
for(let i = 0; i < 1000; i++){
    dataArr.push(i)
}
const position = binarySearch(dataArr,786,0,dataArr.length - 1);
if(position !== -1){
    console.log(`目标元素在数组中的位置:${position}`)
}else{
    console.log("目标元素不在数组中");
}
console.log(num)
console 命令行工具 X clear

                    
>
console