/**
* 二分查找
* @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