2016-08-19 1 views
-8

Ich habe gerade angefangen zu programmieren. Ich habe diesen Code gerade geschrieben und es funktioniert nicht. Können Sie mir bitte sagen, warum?Kann mir jemand sagen, warum meine Sortierung nicht funktioniert? (c code)

code =

int main(int argc, const char *argv[]) 
{ 
    int a, b, c, d, e, f, g, h, i, j; 
    int s; 

    printf("enter 10 numbers: "); 
    scanf("%d%d%d%d%d%d%d%d%d%d", &a, &b, &c, &d, &e, &f, &g, &h, &i, &j); 

    int numbers[10] = {a, b, c, d, e, f, g, h, i, j}; 

    //%d %d %d %d %d %d %d %d %d %d  a, b, c, d, e, f, g, h, i, j 
    printf("before \n %d %d %d %d %d %d %d %d %d %d\n", a, b, c, d, e, f, g, h, i, j); 

    for (int k = 0; k == 10; k++) { 
     if (numbers[k] <= numbers[k + 1]) { 
      numbers[k] = s; 
      numbers[k] = numbers[k + 1]; 
      numbers[k + 1] = s; 

     } 
    } 

    printf("after \n %d %d %d %d %d %d %d %d %d %d\n", numbers[0], numbers[1], numbers[2], numbers[3], numbers[4], numbers[5], numbers[6], numbers[7], numbers[8], numbers[9]); 

    return 0; 
} 
+2

Dies ist eine direkte Verletzung der Frage Fragen Regeln)) – vitr

+3

Was meinst du damit nicht funktioniert? Was funktioniert nicht? Welchen Fehler erhalten Sie, wenn Sie versuchen, Ihren Code auszuführen? Sobald Sie das in Ihrem Beitrag erfahren, können Sie etwas Hilfe von der Community auslassen. – RBT

+1

1. Zeigen Sie die Warnungen Ihres Compilers an. Dadurch wird mindestens eines Ihrer Probleme angezeigt. 2. Führen Sie den Code in einem Debugger aus, führen Sie einzelne Schritte durch und untersuchen Sie die Variablenwerte, um zu verfolgen, was in Ihrem Code geschieht. Das wird mindestens ein weiteres Problem aufdecken. – WhozCraig

Antwort

1

Nun, für den Anfang, sie ist ziemlich sicher, dass der Eingang zu Ihrer scanf Funktion falsch ist. Das erste '% d' wird alle Ziffern in der Zeichenfolge einfrieren, so dass die Variablen b, c, d, e, f, g, h, i und j nicht initialisiert werden.

Auch Sie tun numbers[k] = s; und numbers[k + 1] = s;, wenn 's' zu nichts initialisiert wurde.

1

Es gibt viele Fehler in dem obigen Code. Zu allererst ist deine "for" -Bedingung falsch (k == 10). Zweitens ist es nicht ausreichend, das Array nur einmal zu durchlaufen. Sie müssen Ihr Array so oft durchlaufen, bis kein Austausch mehr stattfindet. (siehe Bubblesort)

0

Ihre for-Schleife Bedingung fällt in erster Instanz, im ersten Schritt k ist 0 und Prüfung auf Wert 10 (if (k==10) in (k=0;k==10;k++)) Dies wird nicht für Ihre For-Schleife Logik ausführen und auf den ersten Fall kommen Sie aus für Schleife.

0

Damit Sie sehen, was

In Englisch/Pseudo-Code mit deinem Sortiercode falsch sein könnte:

Read 10 elements of the array 
For each 11 elements (0,1,2,3,4,5,6,7,8,9,10) of the array 
    if the current element is less of equals to the next element (including the 12th element when the element index is 11) 
     then 
      Store the value in 's' in place of the current element (what is in 's' might be up to the phase of the moon) 
      Store the value of the next element in the current element (we will never know what was the the mystery value in 's', unless ....) 
      Store the value of 's' in the next element (next comparison will be a big surprise) 


Print the 10 elements of the transformed array 

fair sein könnte, es ist immer noch nicht genug sein, Ihre Fehler zu zeigen

lassen Sie uns eine Karte Analogie haben

  • mische dein Deck aus 52 Karten
  • Pick 10 Karten aus dem Deck (7 10 5 4 ...)
  • Blick auf die erste Karte von der Hand (zum Beispiel eine 7 von Diamond)
  • Blick auf die nächste (zum Beispiel ein 10 Club)
  • wenn der erste kleiner oder gleich der zweite ist dann: Königin der Herz)
  • Wurf entfernt die erste Karte:
    • die erste Karte durch die oberste Karte des Decks (Beispiel ersetzen
    • ersetzen Sie die neue Karte durch die zweite Karte
    • setzen die neue Karte an der zweiten Stelle
  • aussehen die zweite Karte (Königin von Herz)
  • Blick auf die dritte Karte (5 von Spade)
    ... Lassen Sie uns bis zum 10. überspringen Karte
  • Blick auf die 10. Karte (ok ....)
  • Blick auf die 11. Karte (Sie verzerren die Dimension, um eine andere Karte in der 55. Dimension zu sehen, es ist ein XZ von Roses)
  • Vergleichen Sie die Werte (durch mehrdimensionale Mathematik finden Sie heraus, dass Shrodingers Katze lebt und treten)
  • die Sonne kommt näher an der Erde einige seltsame Eiszeit verursacht, dass diejenigen, für eine zweite ...
  • deren Namen niemand sollte sprechen bringen Sie eine Karte 12. ...
  • dauern würde
  • Sie wurden von einem grue
012 gegessen

Andere als zu versuchen, für Werte zu suchen, die einige Leute haben Sie nicht vorhanden ist, geraten bei simplesortingalgorithm zu sehen, dass einige einfach liefern zu lernen C

Pseudocode

Viel Glück in Ihrer Reise zu verstehen

Verwandte Themen