| | | | | |

Bottom-Up Merge Sort

void merge_sort_bu (A, n)
{
  if (n < 2) return;
  for (size_t i = 1; i < n; i = i+i)
  {
    for (size_t j = 0; j < n - i; j += i+i)
    {
      if (n < j+i+i) // possible at last step
        merge(A + j, A + j+i, A+n);
      else
        merge(A + j, A + j+i, A + j+i+i);
    }
  }
}
  1. Stable
  2. Runtime = Θ(n log n)
  3. Runspace = +Θ(n)
  4. No way around #3 for arrays, vectors, deques
  5. Can eliminate #3 for lists!

| | Top of Page | 8. Sorting Algorithms - 9 of 16