/**
*
* @param {*} arr 有序数组
* @param {*} firstNumIndex 第一个值的索引
* @param {*} lastNumIndex 最后一个值的索引
* @param {*} target 想要查找的值
*/
function binarySearch(arr, target) {
var firstNumIndex = 0;
var lastNumIndex = arr.length - 1;
while (firstNumIndex <= lastNumIndex) {
var mid = Math.floor((lastNumIndex + firstNumIndex) / 2); // Math.floor, 向下取整,一种取中间数的方法
//var mid = parseInt((lastNumIndex + firstNumIndex) / 2); // 当值为数字时,parseInt与Math.floor得到的结果是一样的
if (target == arr[mid]) {
console.log(mid); // 0
return;
}
if (target > arr[mid]) {
firstNumIndex = mid + 1;
} else if (target < arr[mid]) {
lastNumIndex = mid - 1;
}
}
}
var arr = [-1, 3, 5, 7, 89, 101]
var target = -1;
binarySearch(arr, target)
步骤分析
1、二分查找法,其实就是通过三个数来查找。
2、选一个开始值,选一个末尾值,再计算出中间值。
3、将中间值与你想查找的值做比较:
如果目标值大于中间值,那么以中间值的下一位作为新的开始值,重新计算中间值;
如果目标值小于中间值,那么以中间值的前一位作为新的末尾值,重新计算中间值;
如果目标值等于中间值,那么得到了我们想要的结果。
用二分法要注意的点:
1、数组必须是有序数组(从大到小或者从小到大)
2、要确认有序数组中是否存在相同的值,若有,则根据自己的需求做相应处理。
浙公网安备 33010602011771号