/** * * @param {*} arr 有序数组 * @param {*} firstNumIndex 第一个值的索引 * @param {*} lastNumIndex 最后一个值的索引 * @param {*} target 想要查找的值 */ function binarySearch(arr, target) { var firstNumIndex = 0, lastNumIndex = arr.length - 1; while (firstNumIndex <= lastNumIndex) { var mid = Math.floor((lastNumIndex + firstNumIndex) / 2); //var mid = parseInt((lastNumIndex + firstNumIndex) / 2); 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 num = -1; binarySearch(arr, num)
步骤分析
1、二分查找法,其实就是通过三个数来查找。
2、选一个开始值,选一个末尾值,再计算出中间值。
3、将中间值与你想查找的值做比较:
如果目标值大于中间值,那么以中间值的下一位作为新的开始值,重新计算中间值;
如果目标值小于中间值,那么以中间值的前一位作为新的末尾值,重新计算中间值;
如果目标值等于中间值,那么得到了我们想要的结果。
用二分法要注意的点:
1、数组必须是有序数组(从大到小或者从小到大)
2、要确认有序数组中是否存在相同的值,若有,则根据自己的需求做相应处理。
原文:https://www.cnblogs.com/yourstars/p/14360665.html