diff --git a/10_sortierung/sortierung.c b/10_sortierung/sortierung.c index 866f6bf..306c2ca 100644 --- a/10_sortierung/sortierung.c +++ b/10_sortierung/sortierung.c @@ -22,9 +22,43 @@ void selectionSort(int array[], int anzahl) } } +static int *sortiereUmPivot(int array[], unsigned int anzahl) +{ + int *linksZgr = array; + int *rechtsZgr = array + anzahl - 1; + int *pivot = rechtsZgr; + + rechtsZgr--; + + while(linksZgr < rechtsZgr) + { + while(linksZgr < rechtsZgr && *linksZgr <= *pivot) + linksZgr++; + + while(linksZgr < rechtsZgr && *rechtsZgr > *pivot) + rechtsZgr--; + + if(*linksZgr > *rechtsZgr) + tausche(linksZgr, rechtsZgr); + } + + if(*linksZgr <= *pivot) + linksZgr = pivot; + else + tausche(linksZgr, pivot); + + return linksZgr; +} + void quickSort(int array[], int anzahl) { - + if(anzahl > 1) + { + int *pivot = sortiereUmPivot(array, anzahl); + unsigned int anzahlLinks = pivot - array; + quickSort(array, anzahlLinks); + quickSort(pivot, anzahl - anzahlLinks); + } } static void mische(int links[], int rechts[], int anzahlLinks, int anzahlRechts) diff --git a/10_sortierung/sortierungsvergleich.c b/10_sortierung/sortierungsvergleich.c index f551a0b..1a4fe99 100644 --- a/10_sortierung/sortierungsvergleich.c +++ b/10_sortierung/sortierungsvergleich.c @@ -51,8 +51,8 @@ int main() starteUhr(); //selectionSort(zufallszahlen, ANZAHL); - mergeSort(zufallszahlen, ANZAHL); - //quickSort(zufallszahlen, ANZAHL); + //mergeSort(zufallszahlen, ANZAHL); + quickSort(zufallszahlen, ANZAHL); //qsort(zufallszahlen, ANZAHL, sizeof(zufallszahlen[0]), vergleiche); printf("Zahlen sortiert nach %lf Sekunden.\n", messeZeitInSek());