Nathan Sprague
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
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?
Now we can write down the overall sum:
Substituting:
Useful fact:
Repeat the analysis for assignments…
Space, Right Arrow or swipe left to move to next slide, click help below for more details