当前位置:首页 > JavaScript

递归实现快速排序js

2026-04-04 16:57:07JavaScript

递归实现快速排序的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)。创建左右两个空数组用于存放小于和大于基准值的元素。

遍历数组剩余元素,根据与基准值的比较结果分别放入左右数组。最后递归排序左右数组并与基准值合并返回。

优化版本

上述实现空间效率较低,以下是原地排序的优化版本:

递归实现快速排序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)。空间复杂度取决于实现方式,原始版本为O(n),优化版本为O(log n)。

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

相关文章

php实现递归更新

php实现递归更新

递归更新实现方法 在PHP中实现递归更新通常用于处理树形结构数据或嵌套数据的层级更新操作。以下是几种常见场景的实现方式: 数据库树形结构递归更新 对于存储在数据库中的树形结构(如分类目录),使用递归…

php函数使用递归实现

php函数使用递归实现

递归的基本概念 递归是一种在函数内部调用自身的编程技术。它通常用于解决可以被分解为相同问题的子问题的情况。递归函数需要有一个终止条件,否则会导致无限循环。 递归函数的实现 在PHP中,递归函数的实现…

js快速排序的实现

js快速排序的实现

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

js递归实现求和

js递归实现求和

递归求和的基本原理 递归是一种通过函数调用自身来解决问题的方法。在求和场景中,递归通过不断将问题分解为更小的子问题(如数组前n-1项的和加上第n项),直到达到基线条件(如空数组或单元素数组)终止递归。…

js 递归实现

js 递归实现

递归的基本概念 递归是一种通过函数调用自身来解决问题的方法。在JavaScript中,递归通常用于处理具有重复结构的问题,如树遍历、阶乘计算等。 递归实现阶乘 阶乘是一个经典的递归示例。n的阶乘(n…

js实现简单递归

js实现简单递归

递归的基本概念 递归是一种通过函数调用自身来解决问题的方法。在JavaScript中,递归函数通常包含一个基线条件(终止条件)和递归条件(调用自身的条件)。 实现阶乘的递归函数 阶乘是递归的经典例子…