Commented

This commit is contained in:
Samuel Oberhofer 2022-05-26 10:52:47 +02:00
parent 20921665f0
commit d1727afe46
1 changed files with 57 additions and 0 deletions

View File

@ -0,0 +1,57 @@
#include "mergeSort.h"
void merge(int array[], int left, int middle, int right) {
// Keine verschachtelten Schleifen, jedoch wird jedes Element einmal
// bearbeitet -> O(n)
int n1 = middle - left + 1;
int n2 = right - middle;
int leftArray[n1];
int rightArray[n1];
for (int i = 0; i < n1; i++) {
leftArray[i] = array[left + i];
}
for (int j = 0; j < n2; j++) {
rightArray[j] = array[middle + j + 1];
}
int k = 0, l = 0, m = left;
while (k < n1 && l < n2) {
if (leftArray[k] <= rightArray[l]) {
array[m] = leftArray[k];
k++;
} else {
array[m] = rightArray[l];
l++;
}
m++;
}
while (k < n1) {
array[m] = leftArray[k];
k++;
m++;
}
while (l < n2) {
array[m] = rightArray[l];
l++;
m++;
}
}
void mergeSort(int array[], int left, int right) {
if (left < right) {
int middle = left + (right - left) / 2;
// O(T(n/2))
mergeSort(array, left, middle);
// O(T(n/2))
mergeSort(array, middle + 1, right);
// O(n)
merge(array, left, middle, right);
}
}
//
// Insgesamt: 2 * O(T(n/2)) + O(n) -> Master Theorem -> O(n log n)