tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
1437
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    _Dome_ _Dome_ ist offline Mitglied Bronze
    Registriert seit
    Jun 2006
    Beiträge
    42
    Ich möchte mehere Zahlen nach der Größe ordnen und dann nach einander in Editfelder eintragen. Es soll eine Art Bestenliste sein.



    Nehmen wir als Beispiel mal 10 Zahlen die ich Ordnen möchte. Nach dem Schema:

    Spieler1 = 3 Punkte,
    Spieler2 = 12 Punkte,
    Spieler3 = 5 Punkte,
    Spieler4 = 1 Punkte,
    Spieler5 = 0 Punkte,
    Spieler6 = 8 Punkte,
    Spieler7 = 6 Punkte,
    Spieler8 = 3 Punkte,
    Spieler9 = 4 Punkte,
    Spieler10 = 9 Punkte,

    Wie sortier ich die am Besten? Ich möchte keine if-struktur verwenden, da dies ab einer bestimmter Menge extrem unhandlich wird.
     

  2. #2
    Avatar von Turri
    Turri Turri ist gerade online Mitglied Brokat
    Registriert seit
    Jun 2005
    Beiträge
    354
    Hallo,

    Wie hälst du denn deine Spielerdaten?
    In einer STL Liste mit strings oder wie?

    Ich würde die Daten nicht in einzelne Edit-Felder legen.
    nutz lieber eine TListBox zum Anzeigen.

    MfG Turri
     

  3. #3
    Avatar von Navy
    Navy Navy ist offline Freiwillige Serverwehr
    tutorials.de Administrator
    Registriert seit
    Jul 2003
    Ort
    Montreal (Quebec)
    Beiträge
    1.666
    Wenn es eine "handliche" Menge an Daten sind, ist das Sortierverfahren fast schon egal. Nimm ein einfaches Bubblesort...
     
    Navy

    --
    Echtzeithilfe unter irc.tutorials.de #tutorials.de

  4. #4
    Avatar von Turri
    Turri Turri ist gerade online Mitglied Brokat
    Registriert seit
    Jun 2005
    Beiträge
    354
    Die TListBox bietet eine Sort-Funktion an, wenn es wirklich nur um das Sortieren geht.

    MfG Turri
     

  5. #5
    _Dome_ _Dome_ ist offline Mitglied Bronze
    Registriert seit
    Jun 2006
    Beiträge
    42
    Das mit dem Anzeigen ist nicht so schlimm, aber die ListBox ist wirklich besser geeignet. Allerdings unterstützt die ListBox nur eine alphabetische Sortierung und keine nach Zahlen.

    Was ist ein "Bubblesort"?

    Ich speichere die Punkte als Integer und die Spielername als String.
    Am Schluß möchte ich die Spieler mit ihren Punkten auflisten.
     

  6. #6
    Avatar von Navy
    Navy Navy ist offline Freiwillige Serverwehr
    tutorials.de Administrator
    Registriert seit
    Jul 2003
    Ort
    Montreal (Quebec)
    Beiträge
    1.666
    Google liefert zu "Bubblesort" fast 500.000 Einträge...

    Ich habe keine Ahnung über die Struktur Deines Datentyps. Ist das eine Liste, ein Array von structs oder nur ein loser Verbund? Auf jeden Fall musst Du dann auf den Integer sortieren und bei jedem Vertauschen den zugehörigen String mitnehmen...
     
    Navy

    --
    Echtzeithilfe unter irc.tutorials.de #tutorials.de

  7. #7
    _Dome_ _Dome_ ist offline Mitglied Bronze
    Registriert seit
    Jun 2006
    Beiträge
    42
    Sorry, aber nun habe ich google benutzt und auch was gefunden in Bezug auf Bubblesort.


    Hier mal den Code den ich versuche zuverstehn und dann für meine Idee versuchen werde zubenutzen:

    #include <condefs>
    #include <conio>
    #include <iostream>
    #include <stdlib>
    #include <iomanip>

    using namespace std;

    int arr1[50];
    int arr2[50];

    //---------------------------------------------------------------------------
    void generate(int);
    void sort(int);

    void main()
    {
    int a;
    int Z=50;
    clrscr();
    cout << " Wieviele Zufallszahlen ?";
    cin >> Z;
    randomize();
    generate(Z);

    for (a=0; a <= (Z-1);a++)
    arr2[a]=arr1[a];

    cout << fixed << setw(4);
    for(a=0; a<=(Z-1); a++)
    {
    if ((a%20==0) && (a!=0))
    {
    getch();
    clrscr();
    }
    cout << setw(4) << a << ": " << setw(4) << arr1[a] << " " << setw(4) << arr2[a] << endl;
    }


    sort(Z);
    getch();
    clrscr();


    for(a=0; a<=(Z-1); a++)
    {
    if ((a%20==0) && (a!=0))
    {
    getch();
    clrscr();
    }
    cout << setw(4) << a << ": " << setw(4) << arr1[a] << " " << setw(4) << arr2[a] << endl;
    }


    getch();
    }

    void generate(int b)
    {
    for(int a=0; a<=(b-1); a++)
    {
    arr1[a]=(random(100)+1);
    }
    }


    void sort(int A)
    {

    int d;
    for (int i = 0; i <= (A-1); i++)
    {
    for (int j = (A-1); j > i; j--)
    {
    if (arr2[i] >= arr2[j])
    {
    d = arr2[i];
    arr2[i] = arr2[j];
    arr2[j] = d;
    }
    }
    }
    }
    Allerdings steht überall dass diese Methode recht ineffizient ist, also gibt es da bestimmt alternativen - kennt ihr welche?
     

  8. #8
    Avatar von Navy
    Navy Navy ist offline Freiwillige Serverwehr
    tutorials.de Administrator
    Registriert seit
    Jul 2003
    Ort
    Montreal (Quebec)
    Beiträge
    1.666
    Von wie vielen Datensätzen reden wir hier denn? Wenn die Anzahl um die 1000 und darunter liegt, dann ist die Effizienz egal - ich persönlich würde sogar noch eine 10er Potenz höher gehen...

    Bubblesort Meta (n Elemente):
    Code :
    1
    2
    3
    
    gehe mit m von 1 bis n durch die Daten
        gehen mit t von m bis n durch die Daten 
            wenn ein Element E_t kleiner als Element E_t+1 ist, vertausche beide

    Sollte nicht schwer zu implementieren sein.
     
    Navy

    --
    Echtzeithilfe unter irc.tutorials.de #tutorials.de

  9. #9
    _Dome_ _Dome_ ist offline Mitglied Bronze
    Registriert seit
    Jun 2006
    Beiträge
    42
    Danke für die Anregungen .
     

  10. #10
    _Dome_ _Dome_ ist offline Mitglied Bronze
    Registriert seit
    Jun 2006
    Beiträge
    42
    Ich bekomm es einfach nicht hin. Bekomme den Bubblesort nicht hin. Ich will ein Array "zahl[0-19]" welches eben verschiedene Werte habt sortieren und dann in das Array "sort[0-19]" zuweisen.

    Ich komme mir grad echt doof vor, aber ich hoffe hier kann mir jmd helfen.

    Gruß
    Dome
     

  11. #11
    Avatar von Turri
    Turri Turri ist gerade online Mitglied Brokat
    Registriert seit
    Jun 2005
    Beiträge
    354
    Beim Bubble Sort braucht man kein zweites Feld.
    Es wird alles in einem Feld sortiert.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    void sort()
    {
      // arr2 wäre in dein Feld "zahl"
      // A ist die größe deines Feldes
      // jetzt musst du für A nur noch deinen Wert der Feldgröße eintragen.
      int A = 20;
      int d;  // temporärer Wert
      for (int i = 0; i <= (A-1); i++)
      {
        for (int j = (A-1); j > i; j--)
        {
          if (arr2[i] >= arr2[j])
          {
            d = arr2[i];
            arr2[i] = arr2[j];
            arr2[j] = d;
          }
        }
      }
    }
    In arr2 sollten die Werte nun sortiert sein.

    MfG Turri
     

  12. #12
    _Dome_ _Dome_ ist offline Mitglied Bronze
    Registriert seit
    Jun 2006
    Beiträge
    42
    Danke dir. Hab den Code bei mir angepasst und er tut wunderbar. Danke.

    Gruß
    _Dome_
     

Ähnliche Themen

  1. ganze Zahlen der Größe nach ordnen?!
    Von d2mike im Forum Java
    Antworten: 2
    Letzter Beitrag: 26.10.06, 23:28
  2. [MySQL]1 Query, mehrere Tabellen, ordnen nach Timestamp
    Von Julian Maicher im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 15.08.06, 18:14
  3. Antworten: 8
    Letzter Beitrag: 26.09.05, 09:29
  4. 3 Zahlen der größe nach sortieren?
    Von generalgodlike im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 22.06.04, 23:59
  5. Werte nach Größe ordnen
    Von nordi im Forum PHP
    Antworten: 6
    Letzter Beitrag: 06.11.02, 23:16