2017-04-07 3 views
0

Ich habe versucht, schnelle Sortierung jetzt zu implementieren. Aber, ich habe ein Problem mit dem Schleifenteil unterIteration auf Quick Sort

for (int current = 0; current <= high - 1; current++) 

Wenn i mit 0, dass ‚aktueller‘ Anweisung initialisieren, es ist nichts auf dem Bildschirm angezeigt, wenn ich es laufen. Dann versuche ich, es wie in der bereitgestellten Implementierung durch 'niedriges' Argument zu ersetzen, und es wurde entsprechend ausgeführt.

Was ich fragen möchte ist, warum es nicht funktioniert, wenn ich die loop-Anweisung mit 0 initialisieren, die den gleichen Wert wie 'Low' Parameter zugewiesen wurde? Ich habe versucht, neue Variable mit 0 zu initialisieren und diese Variable zu der Schleife zu verwenden, aber es gibt das gleiche Ergebnis wie wenn ich der loop-Anweisung direkt 0 gebe. Danke für die Antwort.

Hier ist der Code:

int partition(int arr[], int low, int high) 
{ 
    int pivot = arr[high]; 
    int index = (low - 1); 
    for (int current = low; current <= high - 1; current++) 
    { 
     if (arr[current] <= pivot) 
     { 
      index++; 
      swap(arr[index], arr[current]); 
     } 
    } 
    swap(arr[index+1], arr[high]); 
    return (index + 1); 
} 

void quicksort(int arr[], int low, int high) 
{ 
    if (low < high) 
    { 
     int pi = partition(arr, low, high); 
     quicksort(arr, low, pi - 1); 
     quicksort(arr, pi + 1, high); 
    } 
} 


int main() 
{ 
    int arr[] = { 3, 4, 2, 5, 1 }; 
    int n = sizeof(arr)/sizeof(arr[0]); 
    quicksort(arr, 0, n-1); 
    for (int i = 0; i < n; i++) 
    { 
     cout << arr[i] << " "; 
    } 
} 

The result when i set the 'current' value with 0

+0

rekursive Aufrufe verwenden das gleiche Array, sollte aber nur auf ihrem Teil davon arbeiten. Wenn Sie von 0 aus starten, verletzen Sie diesen Teil des rekursiven Aufrufs "Vereinbarung". –

Antwort

1

low ist nur 0 im ersten Aufruf zu partition; In anderen Aufrufen werden andere Werte verwendet. Beachten Sie, dass, wenn quicksort sich das zweite Mal anruft, lowpi + 1 zugewiesen wird.

Drucken Sie es am Anfang von partition aus, um dies für einige bekannte nicht zu große Array zu beobachten - das sollte eine gute Bildungsübung im Allgemeinen sein. Ich meine, die erste Zeile partition machen:

cout << "low = " << low << "\n";