Bubblesort



  • Wenn die if-Bedingung in Zeile 20 nicht erfüllt ist, wird c nicht mehr erhöht. Das Programm hängt sich auf.



  • omg.. jetzt gehts.. aber ordnen tut der immernoch nicht richtig.. naja ich probiers mal weiter.. gegebenen falls schreib ich hier wieder rein ^^ danke



  • habs problem immernoch...

    ich wüsste wie ichs behebe aber hab ne frage obs einen Not ausdruck gibt

    also dass ers programm nur macht wenn zahl[1]<=zahl[2]<=zahl[3]<=zahl[4]<=zahl[5]
    nicht zutrifft..

    Edit:

    do {
            c=1;
            k=c+1;                                                                        //bubblesort
            x=false;
    
            while (c<5) {
    
                  if ( zahl[c]>zahl[k] ) {                                       //vergleichen und neusetzen der zahl arrays
    
                      zahl[0]=zahl[c];                                              //zahl[c] wird als zahl[0] zwischengespeichert
                      zahl[c]=zahl[k];                                              //zahl[k] also zahl[c+1] wird auf zahl[c] gesetzt
                      zahl[k]=zahl[0];                                              //zwischenspeicher wird dann wieder auf zahl[k] gesetzt > tausch beendet
                      x=true;
                      c++;
                      k=c+1;
                      printf("Zwischenspeicher: %i %i %i %i %i\n",zahl[1], zahl[2], zahl[3], zahl[4], zahl[5]);
                   }
    
                   else (c=6);  
    
            }
    
        } while(x==true);
    

    das ist halt die schleife... aber der macht das halt nur durch wenn die erste zahl größer die 2te ist.. wenn nicht dann hört der auf..
    weiss jemand ne gute lösung?



  • Statt dem

    else (c=6);
    

    würd ich mal

    else {c += 1 };
    

    versuchen. Schau dir nochmal den Bubble-Sort Algorithmus genau an...



  • den algorithmus kenn ich nicht direkt..

    ich weiss nur wie dieses tauschprinzip funktioniert.. unser lehrer is so einer der einem nix beibringt und einfach sagt "so zu montag macht ihr ein bubblesort programm. ihr habt internet. schaut nach was das ist.. tschüss"

    bzw: was bringt +=?



  • Das c wird um eins erhöht.

    Für den Algorithmus siehe [1]

    Dummerweise gibt es solche Lehrer...

    [1] http://de.wikipedia.org/wiki/Bubblesort#Formaler_Algorithmus



  • also ich habs nochmal umgeschrieben:

    do {
    
                  if  ( zahl[0]>zahl[1] || zahl[1]>zahl[2] || zahl[2]>zahl[3] || zahl[3]>zahl[4] || zahl[4]>zahl[5]  )  {   //vergleichen und neusetzen der zahl-arrays
    
                      for(c=1; c<5; c++) {
                               k=c+1;
                               if (zahl[c]>zahl[k]) {
    
                                                    zahl[0]=zahl[c];                                           //zahl[c] wird als zahl[0] zwischengespeichert
                                                    zahl[c]=zahl[k];                                           //zahl[k] also zahl[c+1] wird auf zahl[c] gesetzt
                                                    zahl[k]=zahl[0];                                           //zwischenspeicher wird dann wieder auf zahl[k] gesetzt > tausch beendet
                                                    printf("\nZwischenspeicher: %i %i %i %i %i",zahl[1], zahl[2], zahl[3], zahl[4], zahl[5]);
                               }
    
                      }
    
                  }
                  else x=false;
    
        } while(x==true);
    
        printf("\n\nZahlen sortiert: %i %i %i %i %i",zahl[1], zahl[2], zahl[3], zahl[4], zahl[5]);
        getch();
    

    das sind jez nur die schleifen. rest ist nur formelles zeug..

    aber der hängt sich wie am anfang auf.. Der letzte Zwischenspeicher ist dann halt = der endausgabe.. aber bis zu der Letzten ausgabe (Zahlen sortiert: ...)
    kommt der garnicht.. nach dem letzten zwischenspeicher hängt der sich auf x_x woran liegts?



  • So sollte es gehen

    #include <stdio.h>
    
    int main(int argc, char* argv[]) {
        int zahl[6] = {0, 3, 1, 99, 4, 2};
        int k;
        int tmp;
    
        int vertauscht = false;
        do {    
            vertauscht = false;
            for(int c=1; c<5; c++) {
    
                k=c+1;
                if (zahl[c]>zahl[k]) {
    
                    tmp=zahl[c];                                           //zahl[c] wird als zahl[0] zwischengespeichert
                    zahl[c]=zahl[k];                                           //zahl[k] also zahl[c+1] wird auf zahl[c] gesetzt
                    zahl[k]=tmp;                                           //zwischenspeicher wird dann wieder auf zahl[k] gesetzt > tausch beendet
    
                    vertauscht = true;
                }
    
            }
    
        } while(vertauscht == true);
    
        printf("\nZahlen sortiert: %i %i %i %i %i\n",zahl[1], zahl[2], zahl[3], zahl[4], zahl[5]); 
    
    }
    

    Vielleicht schaust du dir nochmal den Algorithmus auf Wikipedia an.

    Diese Abbruchbedingung hier

    if  ( zahl[0]>zahl[1] || zahl[1]>zahl[2] || zahl[2]>zahl[3] || zahl[3]>zahl[4] || zahl[4]>zahl[5]  )  {   //vergleichen und neusetzen der zahl-arrays
    

    Ist nicht korrekt. Das ist nämlich nicht die Bedinung, die gegeben sein muss, damit weiter sortiert wird.



  • wieder so ein fehler wo man sich hinter her denkt dass er banal ist..

    naja sorry dass ich soviele dumme fehler gemacht haeb xD danke!



  • YamiSparrow schrieb:

    wieder so ein fehler wo man sich hinter her denkt dass er banal ist..

    Versuch einfach draus zu lernen.

    YamiSparrow schrieb:

    naja sorry dass ich soviele dumme fehler gemacht haeb xD danke!

    Dafür musst du dich nicht entschuldigen. Wie gesagt, lern draus.

    Schönen Abend!


Anmelden zum Antworten