111 lines
2.3 KiB
C++
111 lines
2.3 KiB
C++
#pragma once
|
|
#include "Sortiment.h"
|
|
#include "Ware.h"
|
|
#include <algorithm>
|
|
|
|
void bubbleSort(Ware *waren[10]) {
|
|
for (int n = 10; n > 1; n--) {
|
|
for (int i = 0; i < n - 1; i++) {
|
|
if (waren[i]->getGewicht() > waren[i + 1]->getGewicht()) {
|
|
std::swap(waren[i], waren[i + 1]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void insertionSort(Ware *waren[10], int sortby) {
|
|
if (sortby == 0) {
|
|
for (int i = 1; i < 10; i++) {
|
|
int j = i;
|
|
while (j > 0 &&
|
|
waren[j - 1]->getVerkaufspreis() > waren[j]->getVerkaufspreis()) {
|
|
std::swap(waren[j - 1], waren[j]);
|
|
j--;
|
|
}
|
|
}
|
|
} else if (sortby == 1) {
|
|
for (int i = 1; i < 10; i++) {
|
|
int j = i;
|
|
while (j > 0 &&
|
|
waren[j - 1]->getEinkaufspreis() > waren[j]->getEinkaufspreis()) {
|
|
std::swap(waren[j - 1], waren[j]);
|
|
j--;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void quicksort(Ware *waren[], int l, int u) {
|
|
int i = l, j = u;
|
|
Ware *a;
|
|
int pivot = waren[(l + u) / 2]->getSeriennummer();
|
|
while (i <= j) {
|
|
while (waren[i]->getSeriennummer() < pivot) {
|
|
i++;
|
|
}
|
|
while (waren[j]->getSeriennummer() > pivot) {
|
|
j--;
|
|
}
|
|
if (i <= j) {
|
|
a = waren[i];
|
|
waren[i] = waren[j];
|
|
waren[j] = a;
|
|
i++;
|
|
j--;
|
|
}
|
|
};
|
|
if (l < j) {
|
|
quicksort(waren, l, j);
|
|
}
|
|
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);
|
|
}
|
|
} |