Chapter Index | Slide Index | Frames [ Windows ] | Narrative On | <- prev | next -> |

Classic Merge Sort

void merge_sort(A,p,r)
{
  if (r - p > 1)
  {
    q = (p+r)/2;          // integer arithmetic
    merge_sort(A,p,q);    // recursive call
    merge_sort(A,q,r);    // recursive call
    merge(A,p,q,r);       // defined below
  }
}
void merge(T* A, size_t p, size_t q, size_t r)
{
  T B [r-p];                           // temp space for merged copy of A
  g_set_merge(A+p, A+q, A+q, A+r, B);  // merge the two parts of A to B
  g_copy(B, B+(r-p), A+p);             // copy B back to A[p,r)
}
  1. Stable
  2. Runtime = Θ(n log n)
  3. Runspace = +Θ(n)
  4. No way around #3 for arrays, vectors, deques

<- prev | next -> | Top of Page | 8. Sorting Algorithms - 8 of 16