Quicksort sortiert nicht richtig
-
Hallo, ich habe ein Problem mit Quicksort.
Ich weiß nicht wie ich es beschreiben soll-> seht selbstInput : 5 3 2 6 1 7
Output: 1 2 3 6 5 7
hier ist mein code:
#include <stdio.h> #include <string.h> #include <time.h> #define inserts 6
partition
int partition(int* array, int begin, int end){ int x = array[begin]; /*Pivot*/ int i=begin-1; int j=end+1; int tmp; while(1){ while(array[++i]<x && i<=end); while(array[--j]>x && j>=0); if(i>=j) break; if(array[i]>array[j]){ tmp = array[i]; array[i] = array[j]; array[j] = tmp; } for(; begin < end; begin++) printf("%2d", array[begin]); printf("\n"); } return i; }
quicksort funktion
void quicksort(int* array, int begin, int end){ int q; if(begin<end){ q = partition(array, begin, end); quicksort(array, begin, q-1); quicksort(array, q+1, end); } }
main fkt
int main(void){ int values[inserts] = { 5 , 3 , 2 , 6 , 1 , 7}; int i; for(i=0; i<inserts; i++) printf("%2d ", values[i]); printf("\nZum sortieren Taste druecken!"); if(getchar()) quicksort(values, 0, inserts); printf("\n"); for(i=0; i<inserts; i++) printf("%2d ", values[i]); return 0; }
danke fürs durchlesen
-
Was liefern denn die Zwischenausgaben in der Partition-Funktion?
(btw, das Array geht nur von values[0] bis values[5] - aber du sortierst den Wert values[6] noch mit)
-
quicksort(array, begin, q); quicksort(array, q+1, end);
return j;
so geht es
mfg Stelfer
-
korrigierte version falls doch mal jemand auf das gleiche Problem trifft
cheers#include <stdio.h> #include <string.h> #include <time.h> int partition(int* array, int begin, int end) { int x = array[begin]; /*Pivot*/ int i=begin-1; int j=end+1; int tmp; while(1) { while(array[++i]<x && i<=end); while(array[--j]>x && j>=0); if(i>=j) break; if(array[i]>array[j]) { tmp = array[i]; array[i] = array[j]; array[j] = tmp; } for(; begin < end; begin++) { printf("%2d", array[begin]); } printf("\n"); } return j; } void quicksort(int* array, int begin, int end) { int q; if(begin<end) { q = partition(array, begin, end); quicksort(array, begin, q); quicksort(array, q+1, end); } } int main(void) { int inserts=6; int values[6] = { 5 , 3 , 2 , 6 , 1 , 7}; int i; for(i=0; i<inserts; i++) { printf("%2d ", values[i]); } printf("\nZum sortieren Taste druecken!"); if(getchar()) { quicksort(values, 0, inserts-1); } printf("\n"); for(i=0; i<inserts; i++) { printf("%2d ", values[i]); } return 0; }