From 156f65ae1d40924b65def1c5648bfeb72d8bac55 Mon Sep 17 00:00:00 2001 From: Samuel Oberhofer Date: Thu, 26 May 2022 10:07:13 +0200 Subject: [PATCH] Add mergeSort --- Uebung 1/Algorithms.h | 50 +++++++++++++++++++++++++++++++++++++++++- Uebung 1/Sortiment.cpp | 1 + 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/Uebung 1/Algorithms.h b/Uebung 1/Algorithms.h index d4d4b0a..2760114 100644 --- a/Uebung 1/Algorithms.h +++ b/Uebung 1/Algorithms.h @@ -35,7 +35,7 @@ void insertionSort(Ware *waren[10], int sortby) { } } -void quicksort(Ware *waren[10], int l, int u) { +void quicksort(Ware *waren[], int l, int u) { int i = l, j = u; Ware *a; int pivot = waren[(l + u) / 2]->getSeriennummer(); @@ -60,4 +60,52 @@ void quicksort(Ware *waren[10], int l, int u) { if (i < u) { quicksort(waren, i, u); } +} + +void merge(Ware *array[], int left, int middle, int right) { + int n1 = middle - left + 1; + int n2 = right - middle; + + Ware *leftArray[n1]; + Ware *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]->getBezeichnung() <= rightArray[l]->getBezeichnung()) { + 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(Ware *array[], int left, int right) { + if (left < right) { + int middle = left + (right - left) / 2; + mergeSort(array, left, middle); + mergeSort(array, middle + 1, right); + merge(array, left, middle, right); + } } \ No newline at end of file diff --git a/Uebung 1/Sortiment.cpp b/Uebung 1/Sortiment.cpp index 9c097a1..a1f2196 100644 --- a/Uebung 1/Sortiment.cpp +++ b/Uebung 1/Sortiment.cpp @@ -20,6 +20,7 @@ void Sortiment::sort(int modus) { bubbleSort(this->waren); break; case 3: + mergeSort(this->waren, 0, 9); break; case 4: insertionSort(this->waren, 1);