Hilfe für C



  • Ich habe j auf 0 gesetzt

    printf("\n\nZwischenList \n");
        int j=0;
        do
        {
            swapped=false;
            for(int i=0; i<10; i++)
            {
                if(arr[i]>arr[i+1])
                {
                    int tmp=arr[i];
                    arr[i]=arr[i+1];
                    arr[i+1]=tmp;
                    swapped = true;
                    j++;
                }
                if(i==j)
                {
                    printf("Weihnachtsmann: ");
                }
                printf("|%d|", arr[i]);
            }
        }
        while(swapped==true);
    

    Dann kommt aber diese Ausgabe:

    ZwischenList
    Weihnachtsmann: |10|Weihnachtsmann: |6||30||16||20||20||16||4||4||32|
    ------------
    |6||10||16||20||20||16||4||4||30||32|
    ------------
    |6||10||16||20||16||4||4||20||30||32|
    ------------
    |6||10||16||16||4||4||20||20||30||32|
    ------------
    |6||10||16||4||4||16||20||20||30||32|
    ------------
    |6||10||4||4||16||16||20||20||30||32|
    ------------
    |6||4||4||10||16||16||20||20||30||32|
    ------------
    |4||4||6||10||16||16||20||20||30||32|
    ------------
    |4||4||6||10||16||16||20||20||30||32|
    ------------
    


  • @Martin1809 es gibt jetzt zwei Möglichkeiten:

    Du überlegst dir, wo es sinnvoll ist, das j zu erhöhen.
    (auch das habe ich schon geschrieben)

    Oder du gibst neben der Zahl noch das j mit aus (in Zeile 26)
    Dann siehst du, welche Werte j hat.



  • @Martin1809 ganz blöd gefragt: weißt du, was ein flussdiagramm ist?



  • @DirkB Wenn ich das j außerhalb der do-while schleife ausgeben ist j=20



  • @DirkB Wenn ich

    swapped=false;
    j++;
    for(...)...
    

    habe zeigt der mir

    ZwischenList
    |16|Weihnachtsmann: |18||20||18||8||12||24||26||26||32|
    ------------
    |16||18|Weihnachtsmann: |18||8||12||20||24||26||26||32|
    ------------
    |16||18||8|Weihnachtsmann: |12||18||20||24||26||26||32|
    ------------
    |16||8||12||18|Weihnachtsmann: |18||20||24||26||26||32|
    ------------
    |8||12||16||18||18|Weihnachtsmann: |20||24||26||26||32|
    ------------
    |8||12||16||18||18||20|Weihnachtsmann: |24||26||26||32|
    ------------
    6
    -----------------------
    SortedList
    |8||12||16||18||18||20||24||26||26||32|
    Process returned 0 (0x0)   execution time : 0.045 s
    

    an



  • Ist das so wie das beim Bubblesort sein sollte?
    Wenn ja habe ich das falsche Sortierprinzip benutzt.



  • @Martin1809 Geht doch.

    Hast du mal auf Wikipedia bei Bubblesort nachgeschaut?


  • Mod

    Das ist schon Bubblesort. Was du wohl nicht so ganz verstanden hast, ist, welche Teile der Liste nach dem x'ten Durchgang schon garantiert sortiert sind und welche nicht. Sortier' mal eine Liste, bei der am Anfang alles genau falsch herum sortiert ist und guck dir an, wie sich das Schritt für Schritt umordnet.



  • @SeppJ Mir ist bewusst, dass das Bubblesort ist, das Problem ist das ich die Aufgabenstellung nicht genau genug gelesen habe. Die verlangt das immer das kleinste unsortierte Element nach links gebracht wird.
    Weiß jemand wie der Algorithmus dafür heißt?



  • @Martin1809 auch bubblesort. nur mit dem unterschied, dass du da von rechts nach links tauschen musst. oder meinst du insertionsort? allgemein google -> sortieralgorithmen



  • @Wade1234 Wie mach ich das? Muss ich da einfach von

    if(arr[i]>arr[i+1])
    

    zu

    if(arr[i]<arr[i+1])
    

    ???



  • @Martin1809 also um von rechts nach links zu sortieren vergleichst du array[ARRAYSIZE - i] mit array[ARRAYSIZE - i - 1] ich bin mir aber nicht mehr sicher, ob du überhaupt noch bubblesort machen willst / sollst.



  • @Martin1809 sagte in Hilfe für C:

    Wie mach ich das? Muss ich da einfach von

    Warum probierst du das nicht aus?
    Die zweite Möglichkeit wäre, die Schleife rückwärts (von 9 nach 0) laufen zu lassen.



  • @Martin1809 ps: die aufstellung von flussdiagrammen trainiert genau dieses planen von programmabläufen.



  • @DirkB @Wade1234 Ok, ich bin jetzt doch von Bubble auf Selectionsort gewechselt, habe es jetzt aber so geschafft. Das Programm ist jetzt auch wesentlich besser Durchdacht und allgemeiner, sodass man es auch für andere Zahlen einfach verwenden kann.
    Vielen Dank an euch, ich hätte das ohne euch nicht geschafft und vor allem danke für eure Geduld mit mir, während meiner Teilweise dummen Fragen und Unverständnis.


Log in to reply