当前位置:首页 > JavaScript

js快速排序的实现

2026-01-30 16:15:20JavaScript

快速排序的基本原理

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

实现步骤

选择基准(pivot) 通常选择数组的第一个、最后一个或中间元素作为基准。以下实现以数组中间元素为例。

js快速排序的实现

分区操作 遍历数组,将小于基准的元素移到基准左侧,大于基准的元素移到右侧。分区完成后,基准元素处于正确的位置。

递归排序 对基准左侧和右侧的子数组递归调用快速排序,直到子数组长度为1或0时终止。

js快速排序的实现

代码实现

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 array = [3, 6, 8, 10, 1, 2, 1];
const sortedArray = quickSort(array);
console.log(sortedArray); // 输出: [1, 1, 2, 3, 6, 8, 10]

优化点

原地排序(节省空间) 通过交换元素实现原地分区,避免创建临时数组。以下是原地排序的实现:

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);
}

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;
}

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

基准选择优化 为避免最坏情况(如数组已有序),可采用随机选择基准或三数取中法(选择左、中、右三个元素的中位数)。

时间复杂度分析

  • 最佳/平均情况:O(n log n),每次分区将数组均匀分成两部分。
  • 最坏情况:O(n²),当每次分区极度不平衡(如数组已有序且基准选择不当)。

适用场景

快速排序适合处理大规模数据,尤其当数据随机分布时效率最高。对于小规模数据或近乎有序的数据,插入排序可能更优。

标签: 快速js
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Pro…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…