Zahlen der Größe nach ordnen



  • Hallo,

    ich will ohne Hilfe eines Moduls oder eines Befehls wie sort() (kenn ich nur aus perl..) Zahlen der Größe nach sortieren! Dabei beträgt die Anzahl der Zahlen n!
    Wie löse ich dieses Problem??
    Das kommt mir sehr aufwändig vor..

    So habe ich mir die Lösung vorgestellt, wiegesagt "denke" ich in perl, korrigiert mich also:

    Schreibe alle Zahlen in ein Array, arbeite jeden Eintrag ab und lege einen Höchststandanzeiger an (beispielsweise mit dem inkrementieren einer Variable und einer Assoziation für die derzeit höchste ausgelesene Zahl)
    Wenn die Liste durchgearbeitet ist, lösche die größte Zahl und beginne von vorn..

    ist wahrscheinlich sehr zeitaufwändig..
    Wie arbeitet C++ eigentlich intern mit dem Sortieren von Zahlen???

    Was haltet ihr von meiner Idee?

    mfg CthulhU



  • Das hat nix mit MFC zu tun, also ist es hier eigentlich falsch...

    Also, wenn du nicht weisst wieviele Zahlen du bekommst, würde
    ich mit einer Verketten liste arbeiten, oder mit einem array
    was du zur Laufzeit mit new allokierst, **vorausgesetzt du weisst dann,
    wieviele Zahlen du bekommst.

    Zum Sortieren sag ich nur Bubblesort. Oder schau mal bei volkard.de
    vorbei, in seinem Tutorial beschäftigt er sich auch mit Sortierverfahren...

    Devil**



  • Warum selber machen?

    MSDN:

    /* QSORT.C: This program reads the command-line
     * parameters and uses qsort to sort them. It
     * then displays the sorted arguments.
     */
    
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    
    int compare( const void *arg1, const void *arg2 );
    
    void main( int argc, char **argv )
    {
       int i;
       /* Eliminate argv[0] from sort: */
       argv++;
       argc--;
    
       /* Sort remaining args using Quicksort algorithm: */
       qsort( (void *)argv, (size_t)argc, sizeof( char * ), compare );
    
       /* Output sorted list: */
       for( i = 0; i < argc; ++i )
          printf( "%s ", argv[i] );
       printf( "\n" );
    }
    
    int compare( const void *arg1, const void *arg2 )
    {
       /* Compare all of both strings: */
       return _stricmp( * ( char** ) arg1, * ( char** ) arg2 );
    }
    

Anmelden zum Antworten