Mehrere Zahlen nach Größe ordnen

_Dome_

Mitglied
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.
 

Turri

Erfahrenes Mitglied
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
 

Navy

Freiwillige Serverwehr
Wenn es eine "handliche" Menge an Daten sind, ist das Sortierverfahren fast schon egal. Nimm ein einfaches Bubblesort...
 

Turri

Erfahrenes Mitglied
Die TListBox bietet eine Sort-Funktion an, wenn es wirklich nur um das Sortieren geht.

MfG Turri
 

_Dome_

Mitglied
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.
 

Navy

Freiwillige Serverwehr
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...
 

_Dome_

Mitglied
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:

Code:
#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?
 

Navy

Freiwillige Serverwehr
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:
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.
 

_Dome_

Mitglied
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