#每天一个知识点#
4. 快速排序(Quick Sort)
function quickSort(arr) {
if (arr.length <= 1) {
return arr;
}
const pivotIndex = Math.floor(arr.length / 2);
const pivot = arr.splice(pivotIndex, 1)[0];
const left = [];
const right = [];
for (const item of arr) {
if (item < pivot) {
left.push(item);
} else {
right.push(item);
}
}
return quickSort(left).concat([pivot], quickSort(right));
}

// 示例
const arr = [5, 3, 8, 4, 2];
console.log(quickSort(arr)); // output: [2, 3, 4, 5, 8]
快速排序的时间复杂度为 O(nlogn) 或 O(n^2),其中n代表数组的长度。快速排序在平均情况下运行速度非常快,但在最坏情况下运行速度会非常慢,因为它每次选取的中轴值可能会是最大值或最小值,导致递归树非常深。

空间复杂度为 O(logn) ~ O(n),取决于递归层数。快排使用的是分治的思想,它不需要创建额外的数组,空间复杂度比归并排序要低。

快速排序的基本思想是:从数列中挑出一个元素,称为“基准”(pivot),重新排列数列,使得比基准值小的元素放在基准前面,比基准值大的元素放在基准后面。然后分别对基准前后的子序列递归地进行快速排序,直到整个序列有序。

快速排序是最常用的排序算法之一,因为它的实现非常容易,并且具有较高的效率。
展开
2