面试 - js 二分法,二分查找
二分法
二分查找是一种高效搜索法,是一种可以在有序数组中搜索到特定元素的算法
优缺点
- 优:比较次数少,查找速度快,平均性能好,
- 缺: 要求待查表为有序表,且插入删除困难,
const arr = [2, 1, 3, 5, 6, 4, 7];
function bubbleSort(arr) {
if (!arr.length) return arr;
const copyArr = arr.slice();
for (let i = 0, length = copyArr.length; i < length; i++) {
for (let j = 0; j < length - i - 1; j++) {
const current = copyArr[j];
const next = copyArr[j + 1];
if (current > next) [copyArr[j], copyArr[j + 1]] = [next, current]
}
}
return copyArr;
}
const sortArr = bubbleSort(arr);
// 递归
function binarySearch(arr, num, low = 0, height = arr.length || 0) {
const midIndex = Math.floor((low + height) / 2)
const midNum = arr[midIndex];
if (midNum === num) return [midIndex, midNum];
if (midNum > num) {
height = midIndex - 1;
return binarySearch(arr, num, low, height);
}
if (midNum < num) {
low = midIndex + 1;
return binarySearch(arr, num, low, height);
}
}
// while
function binarySearch1(arr, num) {
let start = 0, end = arr.length, midNum, midIndex;
while (start <= end) {
midIndex = Math.floor((start + end) / 2);
midNum = arr[midIndex];
if (midNum === num) return {midNum, midIndex}
if (midNum > num) end = midIndex - 1;
else if (midNum < num) start = midIndex + 1
}
}
binarySearch1(sortArr, 3)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 kshao-blog-前端知识记录!
评论