当前位置:首页 > JavaScript

用JS实现快速排序算法

2026-03-01 21:42:51JavaScript

实现快速排序的基本思路

快速排序是一种分治算法,通过选择一个基准元素将数组分为两部分,一部分小于基准,另一部分大于基准,递归地对两部分进行排序。

基础实现代码

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

  const pivot = arr[0];
  const left = [];
  const right = [];

  for (let i = 1; i < arr.length; i++) {
    if (arr[i] < pivot) left.push(arr[i]);
    else right.push(arr[i]);
  }

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

原地分区优化版本

减少空间复杂度,直接在原数组上进行分区操作:

用JS实现快速排序算法

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[right];
  let i = left;

  for (let j = left; j < right; j++) {
    if (arr[j] < pivot) {
      [arr[i], arr[j]] = [arr[j], arr[i]];
      i++;
    }
  }

  [arr[i], arr[right]] = [arr[right], arr[i]];
  return i;
}

时间复杂度分析

  • 最佳情况:$O(n \log n)$(每次分区都能均匀划分)
  • 最差情况:$O(n^2)$(每次分区都极端不平衡)
  • 平均情况:$O(n \log n)$

使用示例

const unsorted = [5, 3, 8, 4, 2];
console.log(quickSort(unsorted)); // 输出 [2, 3, 4, 5, 8]
console.log(quickSortInPlace([...unsorted])); // 输出 [2, 3, 4, 5, 8]

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

相关文章

react如何快速搭建项目

react如何快速搭建项目

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

如何快速看懂react项目

如何快速看懂react项目

理解项目结构 React项目通常遵循一定的目录结构。常见的文件夹包括src(存放源代码)、public(存放静态文件)、components(存放组件)、pages(存放页面级组件)等。熟悉这些结构有…

php 实现算法

php 实现算法

PHP 实现常见算法的方法 PHP 作为一门服务器端脚本语言,可以实现多种算法。以下是一些常见算法的 PHP 实现示例。 排序算法 冒泡排序 function bubbleSort($array)…

js实现基数算法

js实现基数算法

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

用JS实现快速排序算法

用JS实现快速排序算法

快速排序的原理 快速排序是一种分治算法,通过选择一个基准元素(pivot)将数组分为两部分,一部分小于基准,另一部分大于基准,然后递归地对这两部分进行排序。 代码实现 function quic…

js算法实现

js算法实现

以下是JavaScript中常见的算法实现示例,涵盖排序、搜索、递归等经典场景: 排序算法 快速排序 function quickSort(arr) { if (arr.length <…