当前位置:首页 > JavaScript

用JS实现快速排序算法

2026-04-04 22:31:37JavaScript

快速排序算法简介

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

用JS实现快速排序算法

实现步骤

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

用JS实现快速排序算法

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

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函数通过双指针调整元素位置,返回基准的最终索引。
  • 原地交换:直接修改原数组,减少内存开销。

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

相关文章

vue怎么实现快速开发

vue怎么实现快速开发

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

react如何快速生成教授叫

react如何快速生成教授叫

在React中快速生成教授叫可以通过多种方法实现,包括使用状态管理、组件封装或第三方库。以下是具体实现方式: 使用useState管理教授叫状态 在函数组件中,通过useState定义教授叫的状态,…

react泡棉如何快速踩开

react泡棉如何快速踩开

快速踩开React泡棉的方法 选择合适的工具 使用硬度适中的鞋子或专用踩踏工具,避免尖锐物体损坏泡棉表面。平底运动鞋或工作靴是不错的选择。 分段踩踏法 将泡棉分成若干区域,每次集中踩踏一个部分。从边…

react diff算法实现

react diff算法实现

React Diff 算法实现原理 React 的 Diff 算法(Reconciliation)是虚拟 DOM(Virtual DOM)更新的核心机制,通过高效比较新旧虚拟 DOM 树的差异,最小化…

蚁群算法js实现

蚁群算法js实现

蚁群算法简介 蚁群算法(Ant Colony Optimization, ACO)是一种模拟蚂蚁觅食行为的启发式算法,常用于解决组合优化问题(如旅行商问题TSP)。蚂蚁通过信息素(pheromone)…

js实现贪心算法

js实现贪心算法

贪心算法简介 贪心算法是一种在每一步选择中都采取当前状态下最优(即最有利)的选择,从而希望导致结果是全局最优的算法。贪心算法常用于解决优化问题,如最短路径、最小生成树等。 贪心算法的基本步骤 贪心算…