当前位置:首页 > JavaScript

用JS实现快速排序算法

2026-04-04 22:31:37JavaScript

快速排序算法简介

快速排序是一种高效的排序算法,采用分治法策略。通过选择一个基准元素,将数组分为两部分,一部分小于基准,另一部分大于基准,然后递归地对这两部分进行排序。

实现步骤

基准选择与分区 通常选择数组中间元素作为基准,使用双指针法(左指针找大于基准的元素,右指针找小于基准的元素)进行交换,直到左右指针相遇。

递归排序 对分区后的左右子数组递归调用快速排序,直到子数组长度为1或0时停止。

用JS实现快速排序算法

JavaScript代码实现

function quickSort(arr) {
  if (arr.length <= 1) return arr;

  const pivot = arr[Math.floor(arr.length / 2)];
  const left = [];
  const right = [];
  const equal = [];

  for (const element of arr) {
    if (element < pivot) left.push(element);
    else if (element > pivot) right.push(element);
    else equal.push(element);
  }

  return [...quickSort(left), ...equal, ...quickSort(right)];
}

// 示例用法
const unsortedArray = [3, 6, 8, 10, 1, 2, 1];
const sortedArray = quickSort(unsortedArray);
console.log(sortedArray); // 输出: [1, 1, 2, 3, 6, 8, 10]

代码说明

  • 基准选择:使用数组中间元素作为基准(pivot),避免最坏情况。
  • 分区过程:遍历数组,将元素按大小分配到leftrightequal数组。
  • 递归合并:对leftright递归排序后,与equal数组合并。

时间复杂度

  • 最优/平均情况:O(n log n)
  • 最坏情况(如已排序数组且基准选择不当):O(n²)

优化建议

  • 随机化基准:选择随机元素作为基准,降低最坏情况概率。
  • 原地排序:通过交换元素减少内存使用(如下方优化代码)。

优化版(原地排序)

function quickSortInPlace(arr, left = 0, right = arr.length - 1) {
  if (left >= right) return;

  const pivotIndex = partition(arr, left, right);
  quickSortInPlace(arr, left, pivotIndex - 1);
  quickSortInPlace(arr, pivotIndex + 1, 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) {
      [arr[left], arr[right]] = [arr[right], arr[left]];
      left++;
      right--;
    }
  }
  return left;
}

关键点

  • 分区函数partition函数通过双指针调整元素位置,返回基准的最终索引。
  • 原地交换:直接修改原数组,减少内存开销。

标签: 算法快速
分享给朋友:

相关文章

react如何快速搭建项目

react如何快速搭建项目

使用 Create React App 搭建项目 Create React App (CRA) 是官方推荐的快速搭建 React 项目的工具。无需配置 Webpack 或 Babel,开箱即用。 安…

php实现欧几里得算法实现

php实现欧几里得算法实现

欧几里得算法简介 欧几里得算法(辗转相除法)用于计算两个非负整数的最大公约数(GCD)。其核心思想是通过反复用较小数除较大数取余,直到余数为0,此时的除数即为最大公约数。 PHP实现方法 以下是用P…

js快速排序的实现

js快速排序的实现

快速排序的基本原理 快速排序是一种高效的排序算法,采用分治策略。通过选择一个基准元素(pivot),将数组分为两部分:小于基准的元素和大于基准的元素。递归地对这两部分进行排序,最终合并得到有序数组。…

js实现基数算法

js实现基数算法

基数排序(Radix Sort)简介 基数排序是一种非比较型整数排序算法,通过逐位分配和收集实现排序。适用于整数或固定格式字符串,时间复杂度为O(nk),其中n是元素数量,k是数字位数。 实现基数排…

递归实现快速排序js

递归实现快速排序js

递归实现快速排序的JavaScript代码 快速排序是一种分治算法,通过递归将数组分成较小的子数组进行排序。以下是JavaScript实现: function quickSort(arr) {…

用js来实现所有算法

用js来实现所有算法

在 JavaScript 中实现所有算法是一个庞大的任务,因为算法种类繁多,涵盖数据结构、排序、搜索、图论、动态规划等多个领域。以下是部分常见算法的 JavaScript 实现示例,供参考: 排序算…