不好意思大家久等了,最近搞测试去了,直接上代码
二分查找
思路: 二分查找要先排序再查找,然后以一个游标,缩小游标的范围,最终得到查找的下标。
二分法:适用于数据量大的时候,数据量小的时候二分法优势不明显。
function quickLook(arr, target) {
arr = arr.sort();
let left = 0; // 左边界索引
let right = arr.length - 1; // 右边界索引
while (left <= right) {
const mid = Math.floor((left + right) / 2); // 计算中间位置索引
if (arr[mid] === target) {
return mid; // 如果目标值等于当前中间位置的值,返回该索引
} else if (arr[mid] < target) {
left = mid + 1; // 如果目标值大于当前中间位置的值,将左边界移动到中间位置的后一个位置
} else {
right = mid - 1; // 如果目标值小于当前中间位置的值,将右边界移动到中间位置的前一个位置
}
}
return -1; // 若未找到目标值,则返回-1表示不存在
}
console.log(quickLook([1, 3, 9, 7, 4, 8, 5], 7));
二分排序
思路: 声明两个数组,大的放右边,小的放左边,然后递归执行。
function quickSort(arr) {
if(!Array.isArray(arr)) return;
if(arr.length === 0) return [];
let cIndex = Math.floor(arr.length/2);
let midden = arr.splice(cIndex, 1);
const pre = [];
const req = [];
for(var i = 0; i < arr.length; i++) {
if(arr[i] > midden) {
req.push(arr[i]);
} else {
pre.push(arr[i]);
}
}
return quickSort(pre).concat(midden, quickSort(req));
}
console.log(quickSort([1, 3, 9, 7, 4, 8, 5]));