diff --git a/Uebung 1/mergeSort_commented.cpp b/Uebung 1/mergeSort_commented.cpp new file mode 100644 index 0000000..ee89dfa --- /dev/null +++ b/Uebung 1/mergeSort_commented.cpp @@ -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) \ No newline at end of file