Add mergeSort

This commit is contained in:
Samuel Oberhofer 2022-05-26 10:07:13 +02:00
parent 0778e02ed0
commit 156f65ae1d
2 changed files with 50 additions and 1 deletions

View File

@ -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; int i = l, j = u;
Ware *a; Ware *a;
int pivot = waren[(l + u) / 2]->getSeriennummer(); int pivot = waren[(l + u) / 2]->getSeriennummer();
@ -60,4 +60,52 @@ void quicksort(Ware *waren[10], int l, int u) {
if (i < u) { if (i < u) {
quicksort(waren, 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);
}
} }

View File

@ -20,6 +20,7 @@ void Sortiment::sort(int modus) {
bubbleSort(this->waren); bubbleSort(this->waren);
break; break;
case 3: case 3:
mergeSort(this->waren, 0, 9);
break; break;
case 4: case 4:
insertionSort(this->waren, 1); insertionSort(this->waren, 1);