冒泡排序动画演示
相邻两个比完就换,一趟把最大的顶到末尾,提前有序就收工。
键盘:← → 单步 ·空格 播放/暂停 · R 重置 ·Home/End 到两端
冒泡排序把相邻两个数拿出来比,顺序不对就互换,一趟走下来最大的那个一定被换到了末尾;下一趟只管剩下那一段,无序区每轮缩短一格。这一页把每一次比较、每一次交换、每一趟的边界都画出来,已就位的柱子一直保持绿色,你能直接看到有序区从右往左长出来。
代码里带了 swapped 标志:某趟一次交换都没发生,说明剩下的已经有序,立刻收工。所以正序数据的耗时是线性的,而倒序会走满 n(n−1)/2 次比较,两种极端在同一页对着跑最有感觉。它是稳定排序——相等的关键字不会互换,切到「多重复」那档可以亲眼确认。
冒泡排序演示怎么用
- 调数据:规模给 4~16,形态分随机、正序、倒序、近乎有序、多重复五档,也可以在自定义那一栏直接写一串数字,空格或逗号分隔。
- 控节奏:0.5× 到 4× 是播放速度,进度条能直接拖到任意一步;键盘 ← → 单步、空格播放暂停、R 回到开头,比鼠标快。
- 看计数:下面两个数字分别累加比较与交换次数,跑完就能拿去和归并、快排对照,这才是几个排序之间的真实差距。
- 读伪代码:右侧每次只亮一行,亮哪行舞台就在做哪件事;对不上就是理解错了,这正是这个页面要给你的反馈。
常见问题
为什么要加 swapped 这个标志?
没有它,序列即使已经有序,外层还会一趟一趟空跑到 n−1。加上之后每趟记录有没有发生交换,一发现没交换就退出,最好情况从 O(n²) 降到 O(n)。
冒泡排序真的需要学吗,实际谁会用它?
工程上几乎不拿它排大数据,它是教学用的:写起来最短,又是原地稳定排序,小规模或近乎有序的数据上表现不差。理解它之后再看希尔、归并、快排的改进点会轻松很多。
为什么交换次数比比较次数少那么多?
相邻交换一次只能消除一个逆序对,而比较是每一步都要做的判断,两者本来就不在一个量级。想压交换次数去看选择排序,它每趟最多换一次。