JavaScript实现快速排序(Quicksort)算法详解

咖啡半糖
咖啡半糖
发布时间:2026-10-13 | 2人浏览过
原创

快速排序是效率极高的排序算法之一,其核心思想简单而优美:选定一个"基准",将数据集分为两部分分别处理,再不断重复这一过程直到完成排序。本文将结合图解步骤,展示如何使用JavaScript语言实现这一经典的递归算法。

结果或目标

掌握快速排序的三步核心逻辑,并能够编写出一段健壮的 JavaScript 代码来对任意数字数组进行升序排列。

准备条件

了解基础编程概念即可。我们将使用纯原生 JavaScript 实现该算法,不依赖任何外部库。代码主要涉及数组操作(如 splice 和 push)以及函数递归调用。

算法核心原理

快速排序的实现过程可以概括为三个关键步骤:

  1. 选择基准(Pivot):从数据集中选取一个元素作为比较标准(通常选中间位置的元素以简化理解)。
  2. 分区操作:遍历剩余元素,将所有小于基准的元素放入左侧子集,所有大于等于基准的元素放入右侧子集。
  3. 递归排序:对左右两个子集重复上述过程,直到子集长度缩减至1个元素,此时序列自然有序。

真实操作顺序

第1步:构建快速排序函数框架

目的:定义入口函数,处理边界条件防止死循环。
动作:首先检查传入数组的长度。如果长度小于或等于1,说明数组已经是有序的,直接返回原数组即可。

第2步:确定基准值并分离数组

目的:提取用于比较的核心数据,并将原始数组解构。
动作计算中间索引 pivotIndex = Math.floor(arr.length / 2)。使用 splice 方法移除该元素并赋值给 pivot,同时初始化两个空数组 left 和 right 用于存放划分后的数据。

第3步:遍历并执行分区

目的:根据大小关系将数据归类。
动作:遍历当前数组中的剩余元素。若元素 arr[i] 小于 pivot,则压入 left;否则压入 right。

第4步:递归合并返回结果

目的:将子问题解决的成果组装成最终答案。
动作:递归调用 quickSort(left) 和 quickSort(right)。最后通过 concat 将排好序的左子集、基准值、排好序的右子集连接起来,形成完整的新数组。

JavaScript完整实现代码

var quickSort = function(arr) {
    // 1. 基础判断:长度<=1时直接返回
    if (arr.length <= 1) { return arr; }

    // 2. 获取基准值并从原数组移除
    var pivotIndex = Math.floor(arr.length / 2);
    var pivot = arr.splice(pivotIndex, 1)[0];

    // 3. 定义左右子集容器
    var left = [];
    var right = [];

    // 4. 遍历剩余元素进行分区
    for (var i = 0; i < arr.length; i++){
        if (arr[i] < pivot) {
            left.push(arr[i]);
        } else {
            right.push(arr[i]);
        }
    }

    // 5. 递归排序并拼接结果
    return quickSort(left).concat(pivot, quickSort(right));
};

// 测试数据
var dataArray = [85,24,63,45,17,31,96,50];
console.log("排序前:", dataArray.join(","));
console.log("排序后:", quickSort(dataArray).join(","));

简要总结

快速排序的优势在于其平均时间复杂度较低(O(n log n)),且无需额外的大空间开销。上述代码通过简单的递归逻辑完美演示了这一过程:选基准 -> 分左右 -> 递归处理 -> 拼接结果。以上就是JavaScript实现快速排序(Quicksort)的详细内容,更多关于JavaScript算法设计的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表