Was gibt dieses C-Programm aus?



  • #include <stdio.h>
    #include <stdlib.h>
    void main()
    {
     int x[5];
     int i, key, j, m;
     x[0]=9; x[1]=2; x[2]=5; x[3]=8; x[4]=3;
    for(i=1; i<=4; i++)
    {
       key = x[i];
       j = i - 1;
    
    while(key<x[j] && j>=0)
     {
      x[j+1]=x[j];
      j=j-1;
     }
    x[j+1]=key;
    for(m=0; m<=4; m++)
    printf("%d", x[m]);
    printf("\n");
    }
    system("PAUSE");
    return 0;
    }
    

    Hallo,

    kann einer bitte erklären was dieses Programm in sich hat. Das Programm sortiert die zahlen aber keine Ahnung wie. Wie sortiert den diese zahlen gibt die so aus??? Den Algorithmus dahinter verstehe ich auch nicht!!!

    Vielen Dank



  • infooo schrieb:

    #include <stdio.h>
    #include <stdlib.h>
    void main()
    {
     int x[5];
     int i, key, j, m;
     x[0]=9; x[1]=2; x[2]=5; x[3]=8; x[4]=3;
    for(i=1; i<=4; i++)
    {
       key = x[i];
       j = i - 1;
             
    while(key<x[j] && j>=0)
     {
      x[j+1]=x[j];
      j=j-1;
     }
    x[j+1]=key;
    for(m=0; m<=4; m++)
    printf("%d", x[m]);
    printf("\n");
    }
    system("PAUSE");
    return 0;
    }
    

    Hallo,

    kann einer bitte erklären was dieses Programm in sich hat. Das Programm sortiert die Zahlen aber keine Ahnung wie. Wie sortiert es denn diese Zahlen gibt die so aus??? Den Algorithmus dahinter verstehe ich auch nicht!!!

    Vielen Dank



  • Sieht nach Bubblesort aus.



  • Sortieren??? ja aber wie genau???



  • infooo schrieb:

    Sortieren??? ja aber wie genau???

    Bei so etwas empfiehlt es sich den Code Zeile für Zeile durchzugehen und (mit Papier und Stift) die Variablen-Werte zu betrachten.



  • infooo schrieb:

    Sortieren??? ja aber wie genau???

    Was weißt du bis jetzt über Bubblesort?

    Benutze den Debugger.



  • Ja ist schon klar mit devc++ habe ich die ausgabe aber weiß nicht wie ich ohne pc es hinbekommen soll?
    Ich möchte den Algorithmus dahinter ohne PC verstehen und selbst rausbekommen d.h. ohne Programm.



  • infooo schrieb:

    Ich möchte den Algorithmus dahinter ohne PC verstehen und selbst rausbekommen d.h. ohne Programm.

    Zettel und Bleistift und dann Schritt für Schritt das Programm durchgehen und die Daten/Variablen notieren.

    ⚠ Schritt für Schritt und nichts überspringen.



  • Hier mal ein Ansatz und manchmal ist es auch hilfreich mal den Code in eine verstndlichere Form zu bringen (Einrückungen usw.)

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int x[5]; // deklariert ein array mit 5 werten
        int i, key, j, m; // deklariert die integer variablen i, key, j und m
        x[0] = 9; x[1] = 2; x[2] = 5; x[3] = 8; x[4] = 3; // füllt das array mit werten
        for(i = 1; i <= 4; i++) // zählt von 1 bis 4 und weist den wert dem integer i zu
        {
            key = x[i]; // kopiert den aktuellen wert von array x[stelle i] in den integer key
            j = i - 1; // initialisiert den integer j mit dem wert aus integer i minus 1 
            while(key < x[j] && j >= 0)
            {
                x[j + 1] = x[j];
                j = j - 1;
            }
            x[j + 1] = key;
            for(m = 0; m <= 4; m++)
            {
                printf("%d", x[m]);
            }
            printf("\n");
        }
        system("PAUSE");
        return 0;
    }
    


  • Videonauth schrieb:

    Sehr aussagekräftige Kommentare

    Nicht.



  • DirkB schrieb:

    Videonauth schrieb:

    Sehr aussagekräftige Kommentare

    Nicht.

    Das sol ein Ansatz sein und keine Komplettlösung, das ist nicht meine Aufgabe. Von daher finde ich deine Aussage fehl am Platz.



  • ok danke für die hilfreichen antworten...

    was mach bitte die 2. for-schliefe genau wennn da

    printf("%d", x[m]);
    

    das prog gibt da nur einen wert aus nähmlicht was m ist aber wie kommen die ganzen zahlen hintereinander.

    x[1]= 2;
    dann die erste ausgabe ist
    29583
    25983 hier rückt die 9 nach rechts wie nimmt das programm die ganzen zahlen mit und verschiebt die 9 nach rechts



  • Die zweite for Schleife gibt das ganze Array aus und danach folgt ein new line.
    Das mitnehmen bzw. umschieben der Zahlen finded in der while Schleife statt.



  • Die 2. For-Schleif gibt das Array aus. Daran kannst du den Fortschritt der Sortierung sehen.
    Bei printf("%d", x[m]); wird das Element m vom Array x ausgegeben (als dezimale Zahl)

    Das verschieben macht die while-Schleife.
    Sie merkt sich den ersten Wert in key. Dann wird verschoben, und key an die freie Stelle geschrieben (ist sowas wie Dreieckstausch).



  • vielen dank für die hilfreichen tippssssssssss
    so viel info reicht dankeeeeeeeeeeeeeeeeeeeeee


Anmelden zum Antworten