Und weiter mit den Sortierübungen, jetzt der Quicksort in C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #include <stdio.h> void quick_sort(int *liste, int links, int rechts); void output(int *liste, int start, int ende); int main(int argc, char* argv[]) { int a[] = {15, 9, 12, 1, 6, 13, 3, 4, 7, 10, 8, 11, 2, 5, 14, 16}; printf("+Start:n"); quick_sort(a,0,15); printf("+Ende:n"); output(a,0,15); return 0; } void output(int *liste, int start, int ende) { int i=0; for(i=start; i<=ende; i++) { printf("[%2d] ",liste[i]); } printf("n"); } void quick_sort(int *liste, int in_links, int in_rechts) { int links=in_links; int rechts=in_rechts; int mitte=liste[(links+rechts)/2]; int temp=0; printf("+QSort: Von %d bis %d - Teile bei [%2d]:n ",links,rechts, mitte); output(liste,links,rechts); do { while (liste[links] < mitte) links++; while (liste[rechts] > mitte) rechts--; if (links <= rechts) { printf(" Tausche [%2d] <--> [%2d]n ", liste[links], liste[rechts]); temp = liste[links]; liste[links] = liste[rechts]; liste[rechts] = temp; output(liste,in_links,in_rechts); links++; rechts--; } } while (links <= rechts); if (rechts > in_links) quick_sort(liste, in_links, rechts); if (links < in_rechts) quick_sort(liste, links, in_rechts); } |