📜  javascript quicksort - Javascript (1)

📅  最后修改于: 2023-12-03 15:16:06.530000             🧑  作者: Mango

JavaScript QuickSort 算法

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]

注意事项:

  • 函数参数中的 left 和 right 均为可选参数,默认值分别为 0 和数组长度 - 1.
  • 实现中使用了 ES6 的语法,请确保环境支持或使用 Babel 等工具进行转换。