Ordnung von Zahlen



  • Hi,
    Ich habe ein Programm geschrieben welches mir Zahlen ordnen soll. Die Umsetzung mag nicht die effizienteste Loesung sein, aber da ich noch relativ neu bin, dachte ich es wuerde so funktionieren. Es klappt auch teilweise schon wie ich es mir vorgestellt habe, aber eben noch nicht ganz.

    Ich kann leider den Fehler nicht finden, und hoffe ich bin nicht total Falsch an die Aufgabe herangegangen.

    #include<stdio.h>
    #include<stdlib.h>
    
    int main(void){
        int h1 = 0, h2 = 1, arn, buf, pos = 0, a_size;
    
        printf("\n How many numbers?");
        scanf("%d", &arn);
        arn = arn;
    
        int array[arn];
    
        a_size = sizeof(array) / sizeof(int);
    
        for(h1 = 0; h1 < arn; h1++){
            printf("\n%d:", h1+1);
            scanf("%d", &buf);
            array[h1] = buf;
        }
    
        h1 = 0;
    
        do{
            if(array[h1] > array[h2]){
                buf = array[h1];
                array[h1] = array[h2];
                array[h2] = buf;
                ++h1;
                ++h2;
                pos = 0;
            }else{
                h1 = 0;
                h2 = 1;
                do{
                    ++h1;
                    ++h2;
                    pos++;
                }while(array[h1] < array[h2]);
            }
            }while(pos < a_size);
    
    if(array[0] > array[1]){
                buf = array[0];
                array[0] = array[1];
                array[1] = buf;
    }
    
        for(h2 = 0; h2 < arn; h2++){
            printf("\n%d: %d", h2, array[h2]);
        }
    
        return EXIT_SUCCESS;
    }
    

    Danke an alles was mich ein bisschen schlauer macht...



  • Zeile 9 erscheint mir überflüssig.
    Ansonsten versuche es mal mit Kommentaren. Was ist h1, h2, arn, pos, ....?
    a_size scheint mir identisch zu arn zu sein. Was tun denn die einzelnen Schleifen und wo findet das eigentliche Sortieren statt? Sowas solltest du auch für dich hinschreiben, jetzt weißt du das alles noch, nächste Woche nicht mehr.

    Dann sieh dir vielleicht mal http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/ an.

    Vielleicht kannst du uns auch einen Tipp geben was genau bei deinem Code nicht funktioniert.



  • #include<stdio.h> 
    #include<stdlib.h> 
    
    int main(void){ 
        int h1 = 0, h2 = 1, arn, buf, flag = 0, a_size; 
    
        printf("\n How many numbers?"); 
        scanf("%d", &arn); 
        //arn = arn; 
    
        int* array= malloc(arn*sizeof(int));//C++ Compiler = (int*)malloc(arn*sizeof(int)); 
    
        a_size = arn; 
    
        for(h1 = 0; h1 < arn; h1++){ 
            printf("\n%d:", h1+1); 
            scanf("%d", &array[h1]); 
            //array[h1] = buf; 
        } 
    
        for (h1 = 0; h1 < arn-1; h1++)
        {
             if(array[h1] > array[h1+1])
            { 
                buf = array[h1]; 
                array[h1] = array[h1+1]; 
                array[h1+1] = buf;
                flag = 1;
                continue; 
            }
            if (h1 == arn-2 && flag)
            {
                h1 = 0;
                flag = 0;
            }
        } 
    
        for(h2 = 0; h2 < arn; h2++){ 
            printf("\n%d: %d", h2, array[h2]); 
        } 
    
        return EXIT_SUCCESS; 
    }
    

    :xmas1:



  • Erst mal danke an nwp2 das koennte mir weiterhelfen. aber was mir BubbleSort gegeben hat, verstehe ich garnicht. Es funktioniert nicht, das heisst es wurde nicht auf Funktion hin verbessert sondern entweder auf Lesbarkeit oder Effizients. Nur das leider kein Kommentar abgegeben wurde, weshalb ich leider nicht weiss was es bringt. (Und ja ein paar Sachen im Code sind ueberfluessig, keine Ahnung wie die Entstanden sind)



  • Ok ich habs jetzt geloest, mit qsort. Vielen Dank. Auch wenn ich leider nicht ganz 100%ig verstehe wie es funktioniert..



  • qsort alias quicksort:
    http://de.wikipedia.org/wiki/Quicksort
    bubblesort der wohl einfachste Sortieralgorithmus:
    http://de.wikipedia.org/wiki/Bubblesort

    da kann meist wiki helfen



  • Vielen Dank, das sind 2 sehr interessante Artikel.


Anmelden zum Antworten