Heim  >  Artikel  >  Backend-Entwicklung  >  Wie sortiere ich mehrspaltige Arrays in C effizient?

Wie sortiere ich mehrspaltige Arrays in C effizient?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-04 15:54:02281Durchsuche

How to Sort Multi-Column Arrays in C   Efficiently?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn