赞
踩
常见的二分查找应用比如猜数字游戏。
- // 二分查找适用于有序的数组
- // 这个一个最简单的二分查找算法,前提是数组中不存在重复元素
- function binarySearch(arr, target) {
- if (arr && Array.isArray(arr)) {
- if (!arr.length) return -1
- let left = 0
- let right = arr.length - 1
- while (left <= right) {
- // let mid = Math.floor((left + right) / 2)
- let mid = Math.floor(left + (right - left)/2) // 防止left, right过大相加导致数值溢出
- if (arr[mid] === target) {
- return mid
- }
- if (arr[mid] > target) {
- right = mid - 1
- } else {
- left = mid + 1
- }
- }
- return -1
- }
- }
-
- // 二分查找除了使用循环实现以外还可以使用递归实现
- function bsearch(arr, target) {
- if (arr && Array.isArray(arr)) {
- return bsearchInternally(arr, 0, arr.length - 1, target)
- }
- }
-
- function bsearchInternally(arr, left, right, target) {
- if (left > right) return -1
- let mid = Math.floor(left + (right - left) / 2)
- if (arr[mid] === target) {
- return mid
- }
- if (arr[mid] > target) {
- return bsearchInternally(arr, left, mid - 1,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。