Developer Toolbox

Merge sort

Splits the list in half, sorts each half, then merges the two sorted halves into one sorted list.

  • Ω(n log n)
  • Θ(n log n)
  • O(n log n)
  • O(n)
  • yes
  • no
  • comparing
  • moving
  • in final place
0 / 263 steps

↓ split ↓ merge Merges done: 0 of 23

Comparisons Writes

Press play: the lines show how the cost grows as the sort runs

Press play or step through the algorithm.

Space: play or pause. Left and right arrows: step. Home and End: jump.

Try this: Pick a list with few unique values. When two values are equal, the one from the left half is taken first, so equal values keep their order.

How it works

Keep splitting the list until each piece has one value, which is already sorted. Then merge the pieces back in pairs: compare the first values of both pieces and take the smaller one, again and again. The raised row in the animation is the extra space used while merging.

When it is a good choice

When you need speed that stays good even in the worst case, and equal values must keep their order. Python and Java both use a version of merge sort. Its downside is the extra memory it needs.