Heim > Artikel > Backend-Entwicklung > Wie sortiere ich mehrspaltige Arrays in C effizient?
Mehrspaltige Array-Sortierung in C
Das Sortieren mehrspaltiger Arrays stellt in C im Vergleich zu den integrierten Funktionen von Java eine Herausforderung dar. Eine effiziente Methode besteht darin, die klassische std::qsort-Funktion zu verwenden, die sich beim Sortieren fester Arrays auszeichnet.
Komparator-Implementierung
Um die Sortierung zu erreichen, definieren wir einen Komparator als ein ternärer String-Ausdruck innerhalb der qsort-Funktion. Dieser Komparator führt eine mehrspaltige Sortierung durch, indem er die Werte nacheinander vergleicht. Unten ist der Codeausschnitt:
<code class="cpp">[](const void *arg1, const void *arg2) -> int { int const *lhs = static_cast<int const *>(arg1); int const *rhs = static_cast<int const *>(arg2); return (lhs[0] < rhs[0]) ? -1 : ((rhs[0] < lhs[0]) ? 1 : (lhs[1] < rhs[1] ? -1 : ((rhs[1] < lhs[1] ? 1 : 0)))); }
Im ternären Ausdruck vergleichen wir zunächst die Werte der ersten Spalte (lhs[0] und rhs[0]). Wenn sie gleich sind, vergleichen wir die Werte der zweiten Spalte (lhs[1] und rhs[1]). Das Ergebnis ist negativ, null oder positiv und gibt an, ob das erste Array vor, an derselben Position bzw. nach dem zweiten Array platziert werden soll.
Beispielimplementierung
Stellen Sie sich ein 2D-Array der Größe 10x2 vor, das mit Zufallsdaten gefüllt ist. Wir können std::qsort und den benutzerdefinierten Komparator verwenden, um das Array nach den Werten der ersten Spalte zu sortieren:
<code class="cpp">int ar[10][2]; // Populate array with random data ... // Sort the array using qsort std::qsort(ar, 10, sizeof(*ar), [](const void *arg1, const void *arg2) -> int { int const *lhs = static_cast<int const *>(arg1); int const *rhs = static_cast<int const *>(arg2); return (lhs[0] < rhs[0]) ? -1 : ((rhs[0] < lhs[0]) ? 1 : (lhs[1] < rhs[1] ? -1 : ((rhs[1] < lhs[1] ? 1 : 0)))); });</code>
Komplexitätsanalyse
Die Zeitkomplexität im ungünstigsten Fall von std::qsort und der benutzerdefinierte Komparator ist O(n log n), wobei n die Anzahl der Zeilen im 2D-Array ist. Für bestimmte Szenarien, beispielsweise wenn das Array fast sortiert ist, kann die durchschnittliche Zeitkomplexität jedoch deutlich geringer sein.
Fazit
Durch die Verwendung von std::qsort und Mit einem benutzerdefinierten Komparator können wir mehrspaltige 2D-Arrays in C effizient sortieren. Diese Methode ist zwar nicht so praktisch wie die integrierten Sortierfunktionen von Java, bietet aber eine robuste und leistungsstarke Lösung für Anwendungen zur Datenbestellung.
Das obige ist der detaillierte Inhalt vonWie sortiere ich mehrspaltige Arrays in C effizient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!