Merge Sort is frequently classified as a "divide and conquer" sort because
unlike many other sorts that sort data sets in a linear manner, Merge Sort
breaks the data into small data sets, sorts those small sets, and then
merges the resulting sorted lists together. This sort is usually more
efficient than linear sorts because of the fact that it breaks the list in
half repeatedly, thus allowing it to operate on individual elements in only
log(n) operations, rather than the usual *n*^{2}. Given the data (4 3 1 2) to
sort, Merge Sort would first divide the data into two smaller arrays (4 3)
and (1 2). It would then process the sub list (4 3) in precisely the same
manner, by recursively calling itself on each half of
the
data, namely (4) and (3). When merge sort processes a list with only one
element, it deems the list sorted and sends it to the merging process;
therefore, the lists (4) and (3) are each in sorted order. Merge sort
then merges them into the sorted list (3 4). The same process is repeated
with sublist (1 2)--it is broken down and rebuilt in to the list (1 2).
Merge Sort now has two sorted lists, (4 3) and (1 2) which it merges by
comparing the smallest element in each list and putting the smaller one into
its place in the final, sorted data set. Tracing how merge sort sorts and
merges the subarrays it creates, makes the recursive nature of the algorithm
even more apparent. Notice how each half array gets entirely broken-down
before the other half does.

8 9 3 5 6 4 2 1 7 0

Sorting subarray: [ 8 9 3 5 6 4 2 1 7 0 ]

Sorting subarray: [ 8 9 3 5 6 ]

Sorting subarray: [ 8 9 ]

Sorting subarray: [ 8 ]

Sorting subarray: [ 9 ]

Merging SORTED subarrays ( 8 ) and ( 9 )

Sorting subarray: [ 3 5 6 ]

Sorting subarray: [ 3 ]

Sorting subarray: [ 5 6 ]

Sorting subarray: [ 5 ]

Sorting subarray: [ 6 ]

Merging SORTED subarrays ( 5 ) and ( 6 )

Merging SORTED subarrays ( 3 ) and ( 5 6 )

Merging SORTED subarrays ( 8 9 ) and ( 3 5 6 )

Sorting subarray: [ 4 2 1 7 0 ]

Sorting subarray: [ 4 2 ]

Sorting subarray: [ 4 ]

Sorting subarray: [ 2 ]

Merging SORTED subarrays ( 4 ) and ( 2 )

Sorting subarray: [ 1 7 0 ]

Sorting subarray: [ 1 ]

Sorting subarray: [ 7 0 ]

Sorting subarray: [ 7 ]

Sorting subarray: [ 0 ]

Merging SORTED subarrays ( 7 ) and ( 0 )

Merging SORTED subarrays ( 1 ) and ( 0 7 )

Merging SORTED subarrays ( 2 4 ) and ( 0 1 7 )

Merging SORTED subarrays ( 3 5 6 8 9 ) and ( 0 1 2 4 7 )

0 1 2 3 4 5 6 7 8 9