Ich muss ein Array sortieren- zweidimesional

son gohan

Erfahrenes Mitglied
Hi hi,
kan mir bitte jemand mal ein Tipp geben wie ich ein zweidimensionales Array sortieren kann ohne Hilfe von fertigen Funktionen.

Das Array hat in der zweiten Dimension ein paar verschiedene Idexe mit Integral Zahlen Werten die gesammelt werden und die ich als Sortiergröße schon benutzen könnte aber ich habe keine Ahnung wie ich es hinbekommen kann das zu sortieren in einem Durchlauf oder so?

Kann mir bitte jemand mal ein Tipp geben?
 
Vielleicht solltest Du Dir zuerst einmal gedanken machen, wie man ein normales Array sortiert. Hierzu brauchst Du ja nur eine temporäre Variable, in die Du einen der Werte auslagern kannst um Werte zu tauschen.
Wenn Du das kannst, sollte es kein Problem sein, auch ein 2D Array zu sortieren, nur das Du Dir 2 Koordinaten und einen Wert merken musst.

MfG
TheBadDwarf
 
Ja danke für den Tip, bisher habe ich immer Funktionen benutzt und auch noch kein eindimensionales Array so selbst sortiert und richtige Beispiele im INternet zu finden ist ja auch nie so einfach.
MFG
 
Hallo son gohan,

poste doch dann mal Deinen Quelltext, wie Du Dir die Lösung vorstellst.
Dann können wir Dir bestimmt auch besser weiter helfen, wenn es noch irgendwo hängen sollte. Außerdem interessiert mich der Lösungsansatz, da gibt es nämlich viele.

MfG
TheBadDwarf
 
Hallo,

mache ich gerne mich würde es auch mal interissieren wie man das lösen kann:

Code:
/*
Zuerst wird ein zweidimensionales Array gebildet mit 100 Elementen in der ersten und 14 in der zweiten Dimension
*/
double arr[100][14]

/*
Jetzt wird das Array von einer Schleife gefüllt mit ein paar Werten.
*/
 for(int i=10; i >= 0; i--)
 {
      arr[i][0]  = Zufallzahl;        // Hier wird eine zufällige Ganzahl rein getan
  }

Nun ist das Array gefüllt mit 10 Elementen, beispielweise so:


Code:
/*
arr[0][0]=3;
arr[1][0]=4;
arr[2][0]=8;
arr[3][0]=2;
arr[4][0]=13;
arr[5][0]=43;
arr[6][0]=36;
usw...
*/

Die Frage ist jetzt wie man dieses Array sortieren könnte sodass an erster Stelle im Index [0][0] der kleinste Wert steht, im Beispiel oben wäre das 2, also so sollte das Array am Ende ausgegeben werden:

Code:
/*
arr[0][0]=2;
arr[1][0]=3;
arr[2][0]=4;
arr[3][0]=8;
arr[4][0]=13;
arr[5][0]=36;
arr[6][0]=43;
*/

So wäre das Array jetzt der Größe nach geordnet wie ich es meine. Es ist jetzt aber leider ein zweidimensionales Array das macht sicherlich die Denkarbeit noch komplizierter, bei einem eindimensionalen Array kann man meist einfach eine fertige Funktion benutzen die das Ordner der Reihe nach für einen vornimmt, es wäre aber bestimmt mal interessant zu wissen wie man das ohne Funktionen macht, in meinem Fall ist es sogar so das ich gar keine Funktion dazu zur Verfügung habe und sowieso ien Lösungsweg finden muss.

Ich wüsste jetzt nur wie man den größten oder kleinsten Wert heraus finden könnte durch if() Abragen aber für das Ordnen fällt mir noch nichts ein.
 
Hallo son gohan,

Du gehst leider falsch in der Annahme, dass Du mit der Schleife
Code:
for(int i=10; i >= 0; i--)
genau 10 Elemente füllst, es sind nämlich 11
Das hat zwar zunächst einmal nichts mit Deiner Sortierfunktion zu tun, ist aber ein Fehler, der Dir später noch Probleme bereiten könnte!
Du sagst in diesem Fall, er soll von 10 bis 0 runter zählen:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 = 11 Elemente!

Du solltest bei so einfachen Schleifen von unten nach oben zählen:
Code:
for( int i=0; i<10; i++)
Somit gibst Du die Obergrenze an (10). Hier wird nun von 0 bis 9 gezählt.

Dass mit der Abfrage, ob ein Wert größer oder kleiner ist, ist doch schon mal der richtige Ansatz. Aber versuche zunächst ein einfaches Problem zu lösen (1-dimensionales Array). Du solltest hierbei auf vorgefertigte Sortierfunktionen verzichten und Dir Deine eigene Sortierfunktion schreiben.

Code:
#define MAX_ELEMENTS 100  // definiert eine Konstante für die Anzahl der Elemente

int zahlen[MAX_ELEMENTS];
int tmp;

// Fülle Zufallszahlen
for( int i=0; i<MAX_ELEMENTS; i++ ){
  zahlen[i] = zufallszahl;
}

// Vergleiche alle Zahlen im Array miteinander
for( int i=0; i<MAX_ELEMENTS-1; i++ ){
  // vergleiche zahlen[i] mit dem rest des Arrays in einer weiteren Schleife
     // vergleiche ob die Zahl kleiner ist
     // vertausche ggf. die Positionen der Zahlen (sortieren)
}

Ich möchte Dir an dieser Stelle nicht den gesamten Quellcode runtertippen, da ich den Eindruck habe, dass Du noch nicht so viel programmiert hast. Dann ist es das beste, wenn Du Dir wirklich den Kopf über die Sache zerbrichst. Gerne helfe ich Dir aber auch weiterhin, nur solltest Du zunächst einmal lernen, wie man ein "normales" Array sortiert (ohne vorhandenen Funktionen). Das ist nämlich schon schwierig genug!
Poste doch mal einen solchen Lösungsansatz und dann erarbeiten wir uns zusammen eine Lösung.

Ich möchte Dich hier wirklich nicht enttäuschen, indem ich Dir die Lösung vorenthalte, aber gerade im Anfangsstadium ist der Lerneffekt sehr wichtig und ich glaube Du verstehst die Zusammenhänge besser, wenn Du von allein mit ein paar Tips auf die Lösung kommst.

MfG
TheBadDwarf
 
Hallo TheBadDwarf,

das ist eine sehr lehrreiche Sache mit dir hier ich werde dann wenn ich es schaffe eine Lösung von mir versuchen rein zu stellen wie ich es mir vorstelle, zur Zeit klappt es noch nicht so gut mit der Konzentration da ich wo anders sehr beschäftigt in und Lösungen finden will.

Grüße
 
Zurück