Developer Toolbox

归并排序

把列表分成两半,分别排好,再把排好的两半合并成一个排好的列表。

  • Ω(n log n)
  • Θ(n log n)
  • O(n log n)
  • O(n)
  • 是
  • 否
  • 比较中
  • 移动中
  • 已就位
0 / 263 步

↓ 拆分 ↓ 合并 已完成合并:0 / 23

比较次数 写入次数

点击播放,线条会显示排序过程中代价如何增长

点击播放,或一步一步查看。

空格键:播放或暂停。左右方向键:单步移动。Home 和 End 键:跳转。

试试看: 选一个重复值较多的列表。两个值相等时,先取左半边的那个,所以相等的值会保持原来的顺序。

工作原理

不断把列表对半分,直到每块只剩一个值,这时它自然是排好的。然后两块两块地合并:比较两块最前面的值,取较小的那个,如此反复。动画中升起的那一行,就是合并时用到的额外空间。

适用场合

适合最坏情况下也要保持快速,并且相等的值必须保持原来顺序的场合。Python 和 Java 都使用归并排序的某种变体。缺点是需要额外内存。