Add mergeSort
This commit is contained in:
parent
0778e02ed0
commit
156f65ae1d
|
|
@ -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();
|
||||
|
|
@ -61,3 +61,51 @@ void quicksort(Ware *waren[10], int l, int 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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue