- 二分查找:首先要找到一个中间值,通过与中间值比较,大的放又,小的放在左边。再在两边中寻找中间值,持续以上操作,直到找到所在位置为止
- 时间复杂度:O(log₂n)
- 应用:适用于不经常变动而查找频繁的有序列表
- 非递归
const binarySearch = (arr, value) => {
let start = 0
let end = arr.length - 1
while (start <= end) {
let mid = Math.floor((start + end) / 2)
if (arr[mid] == value) {
return mid
} else if (arr[mid] > value) {
end = mid - 1
} else{
start = mid + 1
}
}
return -1
}
- 递归
const binarySearchByRe = (arr, value, start, end) => {
if(start > end) {
return -1
}
let mid = Math.floor((end + start) / 2)
if(arr[mid] == value) {
return mid
} else if(arr[mid] > value) {
end = mid -1
return binarySearchByRe(arr, value, start, end)
} else {
start = mid + 1
return binarySearchByRe(arr, value, start, end)
}
}
上一篇: js实现顺序查找
下一篇: js实现插值查找
本文为本人学习总结,如有雷同,可联系本人立即修改或者删除