Ich bin ein Anfänger in C und ich habe versucht, ein Quicksort-Programm, das eine zufällig generierte Reihe von reellen Zahlen und seine Größe als Argument nehmen kann, und sortiert dann die Elemente in aufsteigender Reihenfolge . Ich kann nicht herausfinden, was im ersten rekursiven Aufruf der Funktion QuickSort, die das Subarray A [0 ... q-1] darstellen soll, in das Array-Größenfeld geschrieben werden soll. Soweit ich das beurteilen kann, ist der Rest des Codes in Ordnung, denn wenn er mit einem Treiberprogramm verknüpft wird, das die Zufallszahlen erzeugt, gibt das Programm die Elemente zurück, wenn auch in der falschen Reihenfolge. Ich schätze jede Hilfe/Vorschläge.Richtig Partitionieren QuickSort Array
int Partition(float *,int);
int QuickSort(float *A,int n)
{
int q;
if(n>1){
q = Partition(A,n);
QuickSort(&A[],q); //Trying to figure out what to put in here.
QuickSort(&A[q+1],(n-1)-q); //This recursion sends the subarray A[q+1...n-1] to QuickSort, I think it works fine.
}
}
int Partition(float *A,int n){
int i,j;
float x;
x = A[n-1];
i=0;
for(j=0;j<=n-2;j++){
if(A[j] <= x){
A[i]=A[j];
i = i+1;
}
}
A[i]=A[n-1];
return i;
}
Verwenden Sie 0 als fehlenden Index. –
Hmm, das ist näher, die Subarrays sind korrekt sortiert, aber das gesamte Array ist nicht sortiert. So wie es aussieht: A [0] = 0,197551 A [1] = 0,277775 A [2] = 0,277775 A [3] = 0,277775 A [4] = 0,553970 A [5] = 0,197551 A [ 6] = 0,277775 A [7] = 0,277775 A [8] = 0,553970 A [9] = 0,553970 – Stavo
Wenn Sie eine grundlegende Druckfunktion für Arrays hinzufügen, können Sie sie an Schlüsselstellen aufrufen, z. B. in 'Partition(). 'bei der Ein- und Ausfahrt. Und wenn Sie das tun, werden Sie feststellen, dass Ihr Partitionierungscode Ihr Array komplett durcheinanderbringt - der Inhalt davor und danach sind nicht identisch. Zum Beispiel habe ich "P1 (5): [0] = 0,177551 [1] = 0,277775 [2] = 0,277775 [3] = 0,277775 [4] = 0,177551" - 'P2 (5): [0 ] = 0,177551 [1] = 0,177551 [2] = 0,277775 [3] = 0,277775 [4] = 0,177551, wobei sich der tiefgestellte Wert "[1]" von 0,277775 auf 0,177551 geändert hat. Sie müssen Elemente austauschen und nicht nur verschieben. –