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 n2. 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