跳到主要内容
Z

快速排序可视化工具

动态演示快速排序算法,高亮 pivot 与分区过程,支持单步执行、速度调节、自定义输入数据,并实时显示比较/交换次数与伪代码。直接在浏览器中运行。

免费 无需注册 客户端运行 注重隐私 Updated
/
Comparisons: Swaps / writes: Array accesses:

Code examples

Ready-to-copy reference implementations. Free to use in your own projects and assignments.

使用方法

  1. 1 点击 Play 观看每一次分区如何把 pivot 放到正确位置,并将数组围绕它一分为二。
  2. 2 使用 Step 逐次比较,同步跟踪分区指针的移动。
  3. 3 在 Custom input 中输入自定义数字,然后点击 Apply。
  4. 4 跟随高亮的伪代码,同时查看实时更新的比较/交换计数。

为什么使用此工具

  • 了解围绕 pivot 的分区过程如何驱动分治(divide-and-conquer)式的递归排序。
  • 理解为什么快速排序在实际应用中通常是最快的比较排序算法。
  • 指标会展示 pivot 分区效果不佳时(例如数组已排序)出现的最坏情况 O(n²)。
  • 完全在你的浏览器中运行。无需注册,无需上传文件。

常见问题

什么是快速排序?

快速排序选取一个 pivot,将数组分区,使较小的元素位于左侧、较大的元素位于右侧,然后对两侧子数组递归排序。该工具使用 Lomuto 分区方案,以数组末尾元素作为 pivot。

快速排序的时间复杂度是多少?

平均情况下为 O(n log n),但当 pivot 每次都恰好选中最小或最大元素时,最坏情况会退化为 O(n²)。采用随机化选取或三数取中(median-of-three)的方式,可以在实际应用中有效避免这种情况。

快速排序是稳定排序吗?

不是。分区过程中的交换操作会将元素移动到数组各处,可能改变相等值之间的相对顺序。虽然存在稳定的快速排序变体,但它们需要额外的内存。

为什么快速排序如此流行?

它是原地(in place)排序,缓存性能好、常数因子小,因此在实际数据上通常比归并排序或堆排序更快,尽管它存在最坏情况的复杂度限制。

什么是 快速排序可视化工具?

快速排序可视化工具模拟快速排序算法的执行过程:选取一个 pivot,将数组中的元素围绕它分区,然后对两侧子数组递归排序。该工具采用 Lomuto 分区方案,直观展示了快速排序为何平均时间复杂度为 O(n log n),但在 pivot 选择不佳时会退化为 O(n²)。

功能特性

逐步动画演示

查看每个子数组中基准选择、分区和递归的过程。

复杂度

时间复杂度:平均 O(n log n),最坏 O(n²)。空间复杂度:平均 O(log n)。原地排序(in-place);不稳定(not stable)。

100% 隐私保护

完全在浏览器中运行——不上传任何数据。

示例

Input

[5, 2, 8, 1]

Output

choose pivot, partition into < and ≥, recurse → [1, 2, 5, 8] (sorted)

常见使用场景

  1. 1

    理解分区过程

    查看元素如何被划分为 < 基准值 和 ≥ 基准值 两部分。

  2. 2

    最坏情况的陷阱

    查看对已排序输入使用朴素基准选择时,性能如何退化为 O(n²)。

  3. 3

    为何在实践中很快

    查看随机或三数取中基准选择如何避免最坏情况。

概要

Zerethon 的快速排序可视化工具在浏览器中动态演示分治算法:选择一个基准值(pivot),围绕它对元素进行分区,然后递归处理。快速排序平均运行时间为 O(n log n),但在最坏情况下(例如对已排序输入使用朴素的基准选择)会退化为 O(n²);它平均使用 O(log n) 的栈空间,属于原地排序(in-place),且不稳定(not stable)。良好的基准选择方式(例如三数取中或随机选择)可在实践中保持较快的速度。

分类
算法
价格
免费
隐私
基于浏览器
注册
无需

参考资料

隐私

除非另有说明,否则你的数据永远不会离开浏览器。快速排序可视化工具 完全在客户端运行 — 无需上传服务器,不记录日志,不追踪你输入的内容。

刚接触?阅读包含 Big-O 分析的分步讲解: 了解 Sorting Algorithms →

对比

相关工具

在 Zerethon Social 上创作、分享与成长

免费注册。赚取积分,收集成就,与全球创作者建立联系。

免费试用 Zerethon