无需登录 数据私有 本地保存

排序算法可视化 - 冒泡/快排/归并动画

19
0
0
0

排序算法可视化

比较: 0 交换: 0 耗时: 0.0s
默认 比较中 交换中 枢轴(快排) 合并中 已排序
准备就绪 — 选择算法并点击"开始"
排序算法知识点 & 常见问题
什么是冒泡排序?它的工作原理是什么?

冒泡排序(Bubble Sort)是最简单直观的排序算法之一。它重复地遍历待排序数组,依次比较相邻的两个元素,如果顺序错误(前大后小)就交换它们。每一轮遍历会将当前未排序部分的最大值"冒泡"到数组末尾,就像水中的气泡上升一样。

时间复杂度:最坏 O(n²),平均 O(n²),最好 O(n)(已有序时)。空间复杂度:O(1),是原地排序。稳定性:稳定。

快速排序为什么"快"?它的核心思想是什么?

快速排序(Quick Sort)采用分治法策略:选择一个"枢轴"(pivot)元素,将数组分为两部分——小于枢轴的在左边,大于枢轴的在右边,然后递归地对左右子数组进行同样操作。由于每次分区后枢轴就位于最终位置,递归深度为 log n,因此平均效率极高。

时间复杂度:平均 O(n log n),最坏 O(n²)(如已有序时选择固定枢轴)。空间复杂度:O(log n)(递归栈)。稳定性:不稳定。

归并排序有什么特点?它适合什么场景?

归并排序(Merge Sort)同样使用分治法:将数组递归地分成两半,分别排序,然后合并两个有序子数组。它的最大优势是时间复杂度始终为 O(n log n),不受输入数据影响,且是稳定排序

时间复杂度:O(n log n)(所有情况)。空间复杂度:O(n)(需要辅助数组)。稳定性:稳定。适合对链表排序和大数据量的外部排序

三种排序算法如何选择?实际应用建议
  • 冒泡排序:仅用于教学理解排序原理,实际生产环境极少使用。
  • 快速排序:实际应用最广泛,是多数编程语言标准库的默认排序算法(如C++ std::sort、Java Arrays.sort对基本类型)。适合内存中的随机访问数据。
  • 归并排序:适合需要稳定排序的场景,或数据存储在链表中(不需要随机访问),也常用于外部排序(数据太大无法全部加载到内存)。
什么是排序算法的"稳定性"?为什么重要?

稳定排序是指:如果两个元素的值相等,排序后它们的相对顺序保持不变。例如,按分数排序学生列表时,如果使用稳定排序,同分数的学生会保持原来的排列顺序。

冒泡排序和归并排序是稳定的,快速排序是不稳定的(分区过程中可能改变相等元素的相对位置)。在需要多级排序的场景(如先按部门排序,再按入职日期排序),稳定性至关重要。

什么是原地排序(In-place Sorting)?

原地排序指排序过程中只需要常数级别的额外空间(O(1)),不依赖输入规模的辅助存储。冒泡排序和快速排序都是原地排序,而归并排序需要O(n)的辅助数组来合并子数组,因此不是原地排序。在内存受限的环境中,原地排序更具优势。