当前位置:首页 > 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]

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

相关文章

vue快速实现表单

vue快速实现表单

Vue 快速实现表单的方法 使用 Vue 快速实现表单可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 双向绑定 Vue 提供了 v-model 指令,可以快速实现表单数据的双向绑…

vue怎么实现快速开发

vue怎么实现快速开发

Vue 快速开发的实现方法 使用 Vue CLI 或 Vite 快速搭建项目 Vue CLI 是官方提供的脚手架工具,能一键生成项目结构。通过命令 vue create project-name 快速…

react如何快速搭建项目

react如何快速搭建项目

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

如何快速新建react项目

如何快速新建react项目

使用 Create React App 工具 安装 Create React App(CRA)是官方推荐的方式,适合大多数 React 项目初始化。 确保已安装 Node.js(版本 14 或更…

php 实现算法

php 实现算法

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

js实现基数算法

js实现基数算法

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