Sortieren einer Zeile mit Bubblesort



  • Hallo,
    ich bin noch relativer C Neuling und komme gerade an einer Aufgabe an einem dämlichen Problem nicht weiter.
    Ich möchte, dass eine Anzahl von Zeichen erst eingegeben, dann per Bubblesort sortiert und wieder ausgegeben wird.

    int main(int argc, char** argv) {
    
            int  i, j;
            char tmp;
            char sort_line[10];
            fgets(sort_line, 10, stdin);
    
            for (i = (sizeof(sort_line))- 1; i > 0; i--) {
                for (j = 0; j < i; j++) {
                    if (sort_line[j] < sort_line[j + 1]) {
                        tmp = sort_line[j];
                        sort_line[j] = sort_line[j + 1];
                        sort_line[j + 1] = tmp;
                        printf("sortiert %s\n", sort_line); // Zum Test ob die Sortierung richtig funktioniert
                    }
                }
            }
                printf("Das sortierte Wort ist: %s\n", sort_line);
                return (EXIT_SUCCESS);
    
    };
    

    Soweit funktioniert es ja, allerdings habe ich das Problem dass es mir die Zeichen in der falschen Reihenfolge ausgibt (also bca -> cba)

    Ich weiss, dass es wahrscheinlich an dem < in Zeile 11 liegt, falls ich dieses jedoch umdrehe kommt das dabei raus:

    http://img57.imageshack.us/img57/7393/unbenanntzws.jpg
    Wär echt toll wenn jemand einen Rat wüsste 🙂

    greez tobi



  • Das wird daran liegen, dass du das Null-Zeichen, das das Stringende markiert, in den String hineintauschst. Irgendwo greifst du also mit sort_line[j + 1] ein Zeichen zu weit.
    Keine Lust die genaue Stelle zu suchen, ich hasse Bubble Sort 😉



  • Klar, das macht Sinn. hab Zeile 11 nun in

    sort_line[j] > sort_line[j + 1] && sort_line[j+1] != 0)
    

    geändert und nun funktionierts... dass ich da nicht früher drauf gekommen bin 🙄

    Danke für die Hilfe 🙂


Anmelden zum Antworten