当前位置:首页 > JavaScript

递归实现快速排序js

2026-03-01 16:08:46JavaScript

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

快速排序是一种高效的排序算法,采用分治策略。以下是递归实现的JavaScript代码:

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

代码说明

  • 基线条件:当数组长度小于等于1时直接返回,无需排序
  • 选择基准值(pivot):通常选择第一个元素作为基准
  • 分区操作:将小于基准的元素放入left数组,大于等于基准的元素放入right数组
  • 递归调用:对left和right数组分别递归调用quickSort,并将结果与基准值合并

优化版本(原地排序)

上述实现需要额外空间。以下是原地排序的优化版本:

递归实现快速排序js

function quickSort(arr, left = 0, right = arr.length - 1) {
  if (left >= right) return;

  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)

使用示例

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

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

相关文章

vue快速实现表单

vue快速实现表单

Vue 快速实现表单 使用 v-model 实现双向绑定 在 Vue 中,可以通过 v-model 指令快速实现表单元素的双向数据绑定。例如,输入框、复选框、单选按钮和下拉菜单都可以通过 v-mode…

php递归实现阶乘

php递归实现阶乘

递归实现阶乘的原理 阶乘的定义是对于一个非负整数 n,其阶乘是所有小于及等于 n 的正整数的积。递归是一种通过函数调用自身来解决问题的方法。递归实现阶乘的核心思想是将问题分解为更小的子问题,直到达到基…

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…

js实现递归

js实现递归

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

vue实现组件递归

vue实现组件递归

递归组件的实现方法 在Vue中实现递归组件,核心是通过组件在自身模板中调用自身。需要明确递归终止条件以避免无限循环。 定义递归组件 给组件设置name选项,便于在模板中自引用: export de…

如何快速看懂react项目

如何快速看懂react项目

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