📅  最后修改于: 2023-12-03 15:16:06.530000             🧑  作者: Mango
QuickSort 是一种常用的排序算法,其时间复杂度为 O(nlogn)。
QuickSort 通过选择一个基准值(pivot),然后将数组分为两个子数组,其中一个子数组的所有元素都小于基准值,而另一个子数组的所有元素都大于基准值。然后递归地对这两个子数组进行排序。
在具体实现中,我们可以选择将第一个元素作为基准值。我们使用两个指针从两端扫描数组,当左侧指针指向的元素大于等于基准值时停止,当右侧指针指向的元素小于等于基准值时停止。然后交换这两个元素的位置。直到左侧指针大于右侧指针,此时将右侧指针指向的元素与基准值交换位置。最后递归地对左右两个子数组进行排序即可。
以下是 QuickSort 的 JavaScript 实现代码:
function quickSort(arr, left = 0, right = arr.length - 1) {
if (arr.length > 1) {
const index = partition(arr, left, right);
if (left < index - 1) {
quickSort(arr, left, index - 1);
}
if (index < right) {
quickSort(arr, index, right);
}
}
return arr;
}
function partition(arr, left, right) {
const pivot = arr[Math.floor((left + right) / 2)];
while (left <= right) {
while (arr[left] < pivot) {
left++;
}
while (arr[right] > pivot) {
right--;
}
if (left <= right) {
swap(arr, left, right);
left++;
right--;
}
}
return left;
}
function swap(arr, i, j) {
const temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
将上述代码复制到 JavaScript 环境中即可使用。例如:
const arr = [3, 7, 1, 2, 9];
quickSort(arr);
console.log(arr);
// 输出 [1, 2, 3, 7, 9]
注意事项: