algorithm-notes
  • Preface
  • Outline
    • Asymptotic-Analysis
    • Divide-and-Conquer (DnC)
      • Overview
      • Multiplication
      • DnC Strategy
      • Master Method
    • Randomization
      • Overview
      • Discrete Probability
      • Randomized Algorithms
      • Reservoir Sampling
    • Sorting
      • Overview
      • Selection Sort
      • Bubble Sort
      • Insertion Sort
      • Shell Sort
      • Merge Sort
      • Heap Sort
      • Quick Sort
      • Non-Comparison Sort
    • Graph Algorithms
      • Overview
      • Minimum Spanning Tree
      • Shortest Path
      • Topological Sort
    • Tree
      • Overview
      • Balanced Search Tree
        • AVL Tree
        • Red-Black Tree
        • B Tree
      • Heap
      • Disjoint Set
      • Threaded Binary Tree
      • Segment Tree
    • Searching
      • Overview
      • Binary Search
      • Graph Search
      • Hash Table
      • String Search
    • Dynamic Programming
      • Overview
      • Fibonacci Numbers
      • LCS problem
    • Greedy Algorithms
      • Overview
Powered by GitBook
On this page
  • Fundamental Ideas
  • Pseudocode
  • Top-down Approach
  • Bottom-up Approach
  • Algorithm Analysis
  • Additional References

Was this helpful?

  1. Outline
  2. Sorting

Merge Sort

PreviousShell SortNextHeap Sort

Last updated 6 years ago

Was this helpful?

As a typical DnC algorithm, MergeSort tries to solve sorting problem in a recursive, distributed way. Its overall algorithm outperforms the and canonical algorithms.

Fundamental Ideas

MergeSort algorithm takes the unsorted original array and split it into С number of sub-arrays, feeding them individually into the algorithm itself for the same sorting purpose.

Then, resolve each sub-problem with the defined minimal length of sub-array. After recursive calls in each layer of division, combining the results of each subroutine to generate the final sorting solution.

Note: the task's aim might varies with scenarios. e.g. a bulk of sorted arrays reside in memory has to merge into an array with randomly filled elements; therefore, the actual implementation is not definite.

Pseudocode

Though the abstract details are the same, the and are two different implementations of . The first one is suitable for education for its simplicity while the second one has a slightly better performance and widely adopted in many libraries.

Top-down Approach

It is a common practice to use such a recursive approach:

TOP_DOWN_MERGE_SORT(array, low, high, new_array)
  if high - low < 2
    return

  middle := (low + high) / 2
  TOP_DOWN_MERGE_SORT(array, low, middle, new_array)
  TOP_DOWN_MERGE_SORT(array, middle, high, new_array)

  TOP_DOWN_MERGE(array, low, middle, high, new_array)

  MERGE(array, low, middle, high, new_array)

Bottom-up Approach

rather than a recursive method in above approach, using a iterative method:

BOTTOM_UP_MERGE_SORT(array, new_array)
  for width := 1, width < length(array)
    for i := 0, i < length(array)
      MERGE(array, i, min(i+width, n), min(i+2*width, n), new_array)
      i := i + 2 * width
    width := width * 2

and the universal MERGE step:

MERGE(array, low, middle, high, new_array)
  i := low
  j := middle
  for k in range (high - low)
    if i < middle and array[i] < array[j]
      new_array[k] = array[i]
      i := i + 1
    else if j < high and array[j] < array[i]
      new_array[k] = array[j]
      j := j + 1

Algorithm Analysis

Additional References

is a stable sorting scheme that has running times of Ο(n ⋅ log(n)) regardless of the inputs.

It is simple to prove the running complexity by Τ(n) = 2 Τ(n/2) + Θ(n)

Combining and :

master method
InsertionSort
BubbleSort
top-down MergeSort
bottom-up MergeSort
MergeSort
average and worst-case
MergeSort
InsertionSort
https://cs.stackexchange.com/questions/68179/combining-merge-sort-and-insertion-sort
MergeSort