插入排序动画演示

像理扑克牌:拿起下一张往前插,后边的整体让位。

键盘:← → 单步 ·空格 播放/暂停 · R 重置 ·Home/End 到两端

插入排序像理扑克牌:左手那一叠始终排好,右手拿起下一张,从后往前跟已排好的比,比它大的往后让一格,直到找到空位插进去。这一页把让位画成一次一格的互换,你能跟着那张牌一路往左挪,也能看见已排定区是一格一格长出来的。

它是这几个排序里对「近乎有序」反应好的那一个:数据已经差不多排好,每张牌几乎不用让位,总比较次数接近 n。硬指标是后移次数正好等于初始序列的逆序对数——这一页的计数条会把这个数字直接算给你看。它也稳定,相等不互换。

插入排序演示怎么用

  • 盯住 key:标注 key 的那一格是正在找位置的牌,它往左挪一次就是一次让位;比到已排定区外就落位。
  • 数逆序对:「后移」这栏的数字等于原序列里 i<j 且 a[i]>a[j] 的对数,倒序数据下它就是 n(n−1)/2。
  • 试形态:规模 4~16,「正序」跑到 0 次后移,「近乎有序」只有个位数,跟「倒序」对照着看最有感觉。
  • 自定义:在自定义那栏写一串数字(空格或逗号分隔)可以直接演示你手上那份数据要挪多少步。

常见问题

为什么标准库里的小数组都用插入排序?

两个原因:一是常数小,内层循环就是比较加一次移动,分支预测友好、缓存全命中;二是很多真实数据本来就接近有序。数组长度只有几十时,它的实际耗时经常低于快排递归的开销,所以混合排序都拿它当收尾。

后移次数为什么正好等于逆序对数?

每次让位消除的恰好是一个逆序对,而且是相邻的那一对;只要还有逆序对,对应的元素就还得再让一次。两者一一对应,所以让位总次数不多不少就是逆序对数。

它和冒泡排序谁更快?

同为 O(n²),但插入排序一趟能把新元素送到位,冒泡只能让它一次挪一格,实测下来插入的比较与移动次数通常只有冒泡的一半左右。真要排大数据两个都不够看,中等规模看希尔,规模大了看归并和快排。

演示编号 A03无需安装,手机端同样可用按 Ctrl + K 搜工具与演示

顺手能用上的工具