2016-08-02 19 views
-1

In diesem Code, wo ich eine Auswahlsortierung anwenden, warum kann ich nicht die Variable i in der Zeile verwenden, die den Kommentar hat? DankeVariabler Bereich in einer verschachtelten for-Schleife in c (cs50)

void sort(int values[], int n) 
{ 
    for (int i = 0; i < (n-2); i++){ 
     int iSmallest = i; 
     for(int j = i + 1; j < (n-1); j++){ 
      if(values[j] < values[iSmallest])/*Why can't I use values[i] instead of values[iSmallest]?*/ 
      iSmallest = j; 
    } 

    int temp = values[i]; 
    values[i] = values[iSmallest]; 
    values[iSmallest] = temp; 
} 
+0

Wer hat gesagt, dass Sie nicht können? es gibt eine fehlende Klammer, wenn ich es richtig analysiere ... –

+0

Hast du das versucht? – ameyCU

+0

Ich habe ja versucht, aber die Sortierung funktioniert nicht, wenn ich das ändere. Die fehlende Klammer wird im ursprünglichen Code korrigiert. Alles funktioniert perfekt, aber ich verstehe nicht, warum ich die Variable i nicht anstelle der Variable iSallest verwenden kann. Es sieht so aus, als wäre ich außerhalb des Geltungsbereichs, aber ich verstehe nicht, warum – JLDG

Antwort

0

In der inneren Schleife müssen Sie den Index des kleinsten Elements verfolgen, das Sie bisher gefunden haben.

Am Anfang der inneren Schleife, nehmen Sie den Index des ersten Elements, das Sie betrachten, d. H. i, und initialisieren Sie iSmallest damit. Wenn Sie nach dem kleineren Element ein Element finden, aktualisieren Sie iSmallest auf den Index dieses Elements.

Wenn Sie die innere Schleife beenden, verwenden Sie diesen Index, um das kleinste Element mit dem Element um i zu tauschen. Das setzt das kleinste Element auf Index i. Dann inkrementieren Sie i und wiederholen Sie die Suche nach dem nächstkleineren Element.

Die Variable i ist in der Zeile, die Sie kommentiert haben, nicht außerhalb des Gültigkeitsbereichs. Es ist syntaktisch legal, if(values[j] < values[i]) in dieser Zeile zu haben, aber die Sortierung funktioniert nicht richtig.

+0

Ich bin mir ziemlich sicher, dass es eine ganz andere Frage beantwortet. Oder dieses "kann nicht verwenden" bedeutet etwas völlig anderes als mein Verständnis. –

+0

Danke für die Antwort @dbush. Aber wenn es syntaktisch zulässig ist, Werte [i] in dieser Zeile zu verwenden, und iSallest = i, Warum funktioniert die Sortierung nicht, wenn ich Werte [i] verwende? – JLDG

+1

Nicht jeder Code, der syntaktisch zulässig ist, ist logisch korrekt. – rjp