Ich habe einen Datensatz von Messwerten für Schaltenergien.
Eon -> f(U,I,T)
Jetzt möchte ich diesen Datensatz nach T, dann nach U und dann nach I
sortieren. Nach einer Spalte bekomme ichs ja sortiert. Aber wie mache
ich das nach mehreren Spalten.
Ich programmiere in c++.
Die Vergleichsfunktion kann man entsprechend anpassen (gilt für alle
Sortierverfahren):
- wenn x1 > y1 -> tauschen
- wenn x1 == y1 -> wenn x2 > y2 -> tausche
- wenn x1 == y1 -> wenn x2 == y2 -> wenn x3 > y3 -> tausche
usw...
> Ich programmiere in c++.
Wenn du wirklich C++ programmieren würdest, würdest du nicht
selbst ein Sortierverfahren aufsetzen (noch dazu Bubble Sort)
sondern ganz einfach std::sort benutzen.
Du beginnst mal damit, dass du dir eine Klasse oder eine
Struct für eine Zeile deiner 'Tabelle' definierst
class Datensatz {
public:
double T;
double U;
double I;
};
das standard Sortierverfahren findet sich im Header algorithm.
Die einfachste Möglichkeit ist es, wenn ein Objekt selbst weiss,
was es heist kleiner als ein anderes Objekt derselben Klasse zu
sein.
In deinem Fall:
wenn T kleiner als das andere T ist, dann ist das Objekt
auf jeden Fall kleiner.
Ist T größer als das andere T, dann ist das Objekt auf
jeden Fall größer.
Nur wenn beide T gleich sind, erhebt sich die Frage, wer
kommt zuerst. Dann wird U benutzt um das zu entscheiden:
Ist das U kleiner als Das U vom anderen Objekt, dann ist
dieses Objekt kleiner, etc.
Geht man diese Strategie, dass ein Objekt selbst wissen
soll, wann es kleiner als ein anderes Objekt ist, dann
heist das das man sich einen operator< definiert, der
genau diese Strategie ausdrückt.
Du kannst einen std::vector als Datenspeicher benutzen, aber
auch ein Array, gebildet aus Datensatz-Einträgen.
Da du was lernen sollst, nehme ich mal std::vector: