//快速排序优化=>基于冒泡+二分查找
const quickSort = (arr) => {
if (arr.length <= 1) {
return arr;
}
let mid = Math.floor(arr.length / 2);
let midNum = arr.splice(mid, 1)[0];
// let midNum=arr[mid];//这里为什么要用splice?如果用下面这种,会循环递归,死循环报错,用上面的方式就会执行结束
console.log(mid);
let left = [];
let right = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] < midNum) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
// console.log(left,right)
return quickSort(left).concat(midNum, quickSort(right))
};
let arr = [5, 7, 2, 9, 3, 8, 4, 17, 1, 11];
console.log(quickSort(arr));
代码在上面,如果使用注释的那种方式获取中间值,则会死循环,值一直是1,但是用splice就会自动终止. 这是为什么?