sortieren



  • Hi

    Ich hoffe ich bin im richtigen Forum.
    Ich hab ein kleines Problemchen und habe gehofft ihr könnt mir dabei helfen:
    Ich habe zwei Felder zu je 10 elementen zu einem feld zu 20 elementen zusammengefügt,leider will ich jetzt auch noch das große feld sortieren und weiss nicht wie.
    Bitte um Hilfe



  • mergesort



  • mergesort?
    Tut mir leid aber diesen Ausdruck kenne ich nicht.
    Ich möchte in meinem feld [20] die Zahlen sortieren z.b.
    2 34 23 24 25 36 1 3 23 45 46 12 13 14 16 17 19 20 21 20

    soll dann so aussehen: 1 2 3 12 13 14 16 17 19 20 20 21 23 23 24 25 36 45 46




  • Administrator

    typdom schrieb:

    mergesort?
    Tut mir leid aber diesen Ausdruck kenne ich nicht.

    Dann such danach. Deine Lieblingssuchemaschine oder Wikipedia geben da sicher eine Antwort. Ich hänge mal einen Link nach Wikipedia rein, wo du auch noch sonstige Informationen ausser Mergesort hast:
    http://de.wikipedia.org/wiki/Sortierverfahren

    Es gäbe auch direkt von der Standardbibliothek in C++ Sortierverfahren:
    http://www.cplusplus.com/reference/algorithm/

    Grüssli



  • danke für die hilfe
    ich habs so gelöst:

    for(l=0;l<=20;l++)
    {
    for(k=0;k<=19;k++)
    {
    if(feld3[k]>feld3[k+1])
    {
    help = feld3[k];
    feld3[k] = feld3[k+1];
    feld3[k+1] = help;
    }
    }
    }



  • typdom schrieb:

    danke für die hilfe
    ich habs so gelöst:

    for(l=0;l<=20;l++)
    	{
    		for(k=0;k<=19;k++)
    		{
    			if(feld3[k]>feld3[k+1])
    			{
    				help = feld3[k];
    				feld3[k] = feld3[k+1];
    				feld3[k+1] = help;
    			}
    		}
    }
    

    Aber äußerst ineffektiv.

    1. beim allerersten Vergleich vergleichst du efld3[0] mit feld3[0] doof, oder?
    2. Du startest bei idx 0. Diesen Wert vergleichst du mit den restlichen Werten der Liste. Am Ende des ersten Durchlaufs kannst du davon ausgehen, dass an idx=0 der kleinste Wert deiner Liste liegt. Dies läßt sich auch auf l=1, l=2, ... l=19 ausweiten.

    Ergo die bessere Alternative:

    for( int i=0; i<len-1; i++ ) {
        for( int j=i+1; j<len; j++ ) {
            if( liste[j] < liste[i] ) {
                swap( liste, i, j );
            }
        }
    }
    

    Die beste Lösung wäre aber, gleich std::vector zu verwenden und einen Sortieralgorithmus aus std::algorithms zu nehmen.



  • Last mal es mal langsam angehen.
    Der Beitragsteller ist wahrscheinlich ein C++ Anfänger.
    Ihr fahrt doch auch bei eurer erste Fahrstunde auf dem Nürburgring.

    Was man natürlich anmerken kann - das Forum hier wird problemlos gefunden -
    und bei der Suche nach dem Sortieralgorhythmus, der namentlich genannt wird, hat man Schwierigkeiten?

    MfG f.-th.


Anmelden zum Antworten