Array-Sortierung
-
servus
ich kenn bereits sortierverfahren wie bubblesort oder selectionsort. kann auch wunderbar einen Array sortieren lassen.
Nur jetzt hab ich eine Matrix (2D-Array). Nach manipulation des sortieralgo hab ich daraus eine tabellensortierung gemacht (zeile x wird sortiert und alle anderen werte der zeile rutschen mit hoch/runter.
Mein problem: wie bekomm ich es jetzt hin, dass eine sekundäre sortierung ausgeführt werden kann?
Also dass ausgehend von zeile x alle werte von zeile y sortiert werden, die gleiche zeile-x-werte haben?mir gehts erstmal nur um die aufstellung eines lösungsvorschlags
dankeMfG
Majestix
-
An sich genauso, nur das halt das zu sortierende Element ein anderes ist.
Folgendes wäre z.B. möglich.
Zuerst sortiert du nach deinem Primärschlüssel das ganze Feld.
Jetzt suchst du die Teilfelder, welche denselben Primärschlüssel haben und sortierst dann halt nur dieses Teilstück im Feld nach dem Sekundärschlüssel und nicht das gesamte Feld.Darf ich hierbei auf #include <algorithm> und sort hinweisen? Zusammen mit den Iteratoren kannst du so prima nur Teile des Feldes sortieren lassen.
-
Zu Sortierverfahren allgemein und weiterführende Links:
http://de.wikipedia.org/wiki/SortierverfahrenBei grösseren Arrays empfehle ich im allgemeinen Mergesort. Mergesort ist zudem ein stabiler Sortieralgo, wodurch bei erneutem sortieren, die alte Sortierung "erhalten" bleibt.
Wenn du aber von Anfang an, die Sache in einem Schritt sortieren willst, dass nach zwei Kriterien oder mehr sortiert wird, dann ist das doch auch kein Problem. Ich zeige mal den Lösungsansatz anhand von einem Array von Structs.
struct SSort { int x; int y; }; void DieSortierfunktion(SSort* pArray, int nCount) { // ... // Irgendwo in deiner Sortierfunktion wirst du dann die Werte vergleichen. if(pArray[i].x > pArray[i+1].x) { if(pArray[i].y > pArray[i+1].y) { // entsprechend einordnen. } } // ... }Mit der ersten Anweisung stellst du fest, ob das erste Kriterium erfüllt ist und sobald das der Fall ist, überprüfst du noch das zweite Kriterium. Das kann natürlich noch beliebig erweitert, verbessert und verändert werden. Aber das Prinzip hast du hoffentlich verstanden?
Grüssli