Nathan Sprague
private static void mergeSort(int[] numbers, int start, int end) {
if (start < end) {
int mid = (start + end) / 2;
mergeSort(numbers, start, mid);
mergeSort(numbers, mid + 1, end);
merge(numbers, start, mid, end);
}
}
Socrative… Given that merge
requires
private static void merge(int[] numbers, int start, int mid, int end) {
int mergedSize = end - start + 1; // Size of merged partition
int[] mergedNumbers = new int[mergedSize]; // Dynamically allocate temporary
// array for merged numbers
int mergePos = 0; // Position to insert merged number
int leftPos = start; // Initialize left partition position
int rightPos = mid + 1; // Initialize right partition position
while (leftPos <= mid && rightPos <= end) {
if (numbers[leftPos] <= numbers[rightPos]) {
mergedNumbers[mergePos] = numbers[leftPos];
leftPos++;
}
else {
mergedNumbers[mergePos] = numbers[rightPos];
rightPos++;
}
mergePos++;
}
while (leftPos <= mid) {
mergedNumbers[mergePos] = numbers[leftPos];
leftPos++;
mergePos++;
}
while (rightPos <= end) {
mergedNumbers[mergePos] = numbers[rightPos];
rightPos++;
mergePos++;
}
// Copy merged numbers back to numbers
for (mergePos = 0; mergePos < mergedSize; mergePos++) {
numbers[start + mergePos] = mergedNumbers[mergePos];
}
}
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