当前位置:首页 > JavaScript

递归实现快速排序js

2026-01-31 01:04:21JavaScript

递归实现快速排序的JavaScript代码

快速排序是一种分治算法,通过递归将数组分成较小的子数组进行排序。以下是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 (let 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)];
}

代码解析

递归基例处理:当数组长度小于等于1时直接返回,因为单元素数组已经是有序的。

选择基准值(pivot):这里选择数组中间位置的元素作为基准值。

分区操作:创建三个临时数组,分别存放小于、等于和大于基准值的元素。

递归调用:对左右两个子数组递归调用quickSort,并将结果与等于基准值的数组合并。

优化版本(原地排序)

function quickSort(arr, left = 0, right = arr.length - 1) {
  if (left < right) {
    const pivotIndex = partition(arr, left, right);
    quickSort(arr, left, pivotIndex - 1);
    quickSort(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²) - 每次划分都极度不平衡 平均情况:O(n log n)

递归实现快速排序js

使用示例

const unsortedArray = [3, 6, 8, 10, 1, 2, 1];
const sortedArray = quickSort(unsortedArray);
console.log(sortedArray); // [1, 1, 2, 3, 6, 8, 10]

标签: 递归快速
分享给朋友:

相关文章

js实现递归

js实现递归

递归的基本概念 递归是一种通过函数调用自身来解决问题的方法。在JavaScript中,递归通常用于处理具有重复子问题或分治结构的数据,例如树形结构、阶乘计算等。 递归的实现要点 基线条件(Base…

vue组件实现递归

vue组件实现递归

Vue 组件实现递归的方法 在 Vue 中实现递归组件通常用于处理树形结构数据(如菜单、评论嵌套等)。以下是几种常见实现方式: 使用组件名称直接递归 通过组件自身的 name 属性实现递归调用:…

vue组件递归实现评论

vue组件递归实现评论

vue组件递归实现评论 在Vue中实现递归评论组件,可以通过组件自引用(即组件在其模板中调用自身)来实现。这种方法适用于嵌套评论、树形结构数据等场景。 基础实现方法 创建一个递归组件,需要确保组件在…

如何快速看懂react项目

如何快速看懂react项目

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

react泡棉如何快速踩开

react泡棉如何快速踩开

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

如何快速做一个react项目

如何快速做一个react项目

使用 Create React App 快速搭建项目 安装 Create React App(CRA)工具,这是官方推荐的脚手架工具。确保已安装 Node.js(建议版本 12+),运行以下命令创建项…