Loading [MathJax]/jax/output/CommonHTML/fonts/TeX/fontdata.js

Mergesort

Nathan Sprague

10/7/2020

So far...

Merging...

Mergesort

  private static void mergesort(int[] items, int[] temp, 
                                int left, int right) {
    if (left == right) {
      return;
    }

    int mid = (left + right) / 2; 

    mergesort(items, temp, left, mid); 
    mergesort(items, temp, mid + 1, right); 

    merge(items, temp, left, mid, right);
  }

Socrative... Given that merge requires f(n) comparisons to merge n elements, provide a recurrence relation describing the worst-case number of comparisons performed by mergesort.

Merge


  private static void merge(int[] items, int[] temp, 
                            int left, int mid, int right) {

    for (int i = left; i <= right; i++) {
      temp[i] = items[i];// Copy subarray to temp
    }

    int i1 = left;
    int i2 = mid + 1;
    for (int curr = left; curr <= right; curr++) {
      if (i1 == mid + 1) { // Left subarray exhausted
        items[curr] = temp[i2++];
      } else if (i2 > right) { // Right subarray exhausted
        items[curr] = temp[i1++];
      } else if (temp[i1] <= temp[i2]) { // Get smaller value (COUNT THIS!)
        items[curr] = temp[i1++];
      } else {
        items[curr] = temp[i2++];
      }
    }
  }

Socrative... How many comparisons (between keys) are performed by merge in the worst case?

Mergesort Analysis

W(1)=0

W(n)=n1+2W(n2)

Tree method...

Mergesort Analysis

Now we can write down the overall sum: ij=0n2j

i is determined by the initial condition...

n/2i=1

i=log2n

Substituting: log2nj=0n2j

Mergesort Analysis

Useful fact: nj=02j=2n+11

log2nj=0n2j =log2nj=0nlog2nj=02j =n(log2n+1)log2nj=02j (Apply useful fact.) =n(log2n+1)(2log2n+11) =nlog2n+n(2n1) =nlog2nn+1

What about assignments?

Repeat the analysis for assignments...