variables array füllen mit rand



  • hi leute!

    ich hab das problem, dass ich ein progrmm schreibe, das ein variables array mit zufalls zahlen füllt und dann mit verschiedenen sortalgos sortiert... der code ist mir eh klar wie und wo. nur wie fülle ich ein variables array so, dass ich kene doppelten zahlen drinn hab?

    bei einem fixen array würde ich ja die zahlen fix vorgeben und im array mischen. jedoch weiss ich nicht wie das bei einem variablen funzen soll?

    zu gut deutsch in einem array[n] sollen die zahlen 1-n vorkommen.

    das array erstelle ich mit malloc.

    hoffe ich habe mich da verständlich ausgedrückt.

    Danke Curb



  • Thoeretisch hast du da viele Möglichkeiten, jede mit Vor- und Nachteilen.

    Praktisch würde ich mir die infrage kommenden Werte geordnet in einen variablen Array ablegen (sowas hast du ja schon), und dann zufällig Indizes dahinein generieren.
    Bei jedem Index würde ich dann den Wert aus dem Quell-Array (nennen wir's lieber eine Liste) löschen und ins Ziel-Array kopieren.



  • Curb schrieb:

    bei einem fixen array würde ich ja die zahlen fix vorgeben und im array mischen. jedoch weiss ich nicht wie das bei einem variablen funzen soll?

    Ermmm, genauso? Anders gefragt: Wie würdest du es bei einem Array fixer Länge machen, und wo hättest du Probleme bei der Übertragung des Algorithmus auf ein Array variabler Länge?



  • ich glaube ich hab die lösung selbst gefunden.... ich fülle es auch fix und misch dann einfach über die n länge...

    doof bin sorry! 🙄



  • flamer schrieb:

    Praktisch würde ich mir die infrage kommenden Werte geordnet in einen variablen Array ablegen (sowas hast du ja schon), und dann zufällig Indizes dahinein generieren.
    Bei jedem Index würde ich dann den Wert aus dem Quell-Array (nennen wir's lieber eine Liste) löschen und ins Ziel-Array kopieren.

    Ich verstehe das nicht so ganz. Magst das etwas genauer erklären? Hört sich nicht sonderlich optimal an 🙂



  • Hört sich nicht sonderlich optimal an

    Bin auch schon neugierig.
    😉



  • flamer schrieb:

    Hört sich nicht sonderlich optimal an

    Bin auch schon neugierig.
    😉

    Lady's first 🤡



  • Curb schrieb:

    nur wie fülle ich ein variables array so, dass ich kene doppelten zahlen drinn hab?

    wieso stören dich doppelte zahlen? ein sortieralgo sollte damit klarkommen, also sich nicht aufhängen oder sowas.
    🙂



  • ~fricky schrieb:

    wieso stören dich doppelte zahlen? ein sortieralgo sollte damit klarkommen, also sich nicht aufhängen oder sowas.
    🙂

    vielleicht will er die Algorithmen vergleichen anhand der benötigten Schritte?



  • JJR schrieb:

    vielleicht will er die Algorithmen vergleichen anhand der benötigten Schritte?

    naja, aber dazu gehören doch auch beide extremfälle, also wenn alle zahlen verschieden sind und wenn alle zahlen im array gleich sind.
    🙂



  • war auch nur so eine Idee



  • eigentlich will ich es mit der zeit vergleichen nur hab ich das problem das ich nur ganze sekunden raus bekomme. also alles kleiner 1 sec wird nicht angezeigt. was ich noch komisch finde ist , dass der bubble länger braucht als der min sort.
    hier die wichtigen cod stellen:

    aufruf mit zeit messung in der main

    time_t start,end;
    .
    .
    time(&start);
    min_sort(array,m);
    time(&end);
    .
    .
    printf("\nDas Sortieren mit Minimum Sort hat %f Sekunden gedauert",difftime(end,start));
    .
    .
    

    minsort funktion

    void min_sort(int* ptr, int size)
    {
        int buff=size+1;
        int i;
        int j;
    
        for (j=0;j<size;j++) {
    
            for (i=0+j;i<size;i++) {
    
                if (ptr[i]<buff) {
    
                    buff=ptr[i];
                    ptr[i]=ptr[j];
                    ptr[j]=buff;
                }
            }
            buff=size+1;
        }
    }
    

    bubblesort funktion

    void bubble_sort(int* ptr, int size)
    {
        int buff;
        int i;
        char flag;
    
        do {
    
            flag=1;
    
            for(i=0;i<size;i++) {
    
                if(ptr[i]>ptr[i+1]) {
    
                    buff=ptr[i+1];
                    ptr[i+1]=ptr[i];
                    ptr[i]=buff;
                    flag=0;
                }
            }
            size-=1;
    
        }while(!flag && i>0);
    }
    

    bubble wird genauso wie min aufgerufen.
    mir ist leider nicht klar was falsch ist.
    die zeitmessung oder die sort funktionen.
    weil bei 50000 elementen bekomm ich bei min ca 11 sec und bei bubble ca 15...komischer weise wie gesagt nur ganze sekunden.



  • yop definitiv ich brauche mit bubblesort bei mehr zahlen länger.

    hab ich den bubble richti geschrieben?

    und weiß wer wie ich die zeit auch in kleineren einheiten als sekunden messen kann?


Anmelden zum Antworten