Quicksort zum Sortieren eines Arrays von Objekten nach einem bestimmten Mitglied, C++
class Foo
{
public:
int num;
int other;
};
int main()
{
Foo bar[10].num = {1, 9, 3, 5, 1, 6, 10, 0, 6, 3};
//quicksort(bar)
return 0;
}
Ich will schreiben Sie eine quicksort-Funktion, dass Bestellungen, die 'bar' array 'num' aufsteigend. Nicht ganz sicher, was ist der beste Ansatz zu nehmen, wie ich noch nie eine geschrieben quicksort. Ich sah einige Beispiel-codes, aber ich kann nicht sehen, wie Sie zu ändern für diesen Fall. Ein inplace Sortieren erfolgt durch übergabe von Zeigern auf das erste und Letzte Elemente des Arrays nicht funktioniert, da diese nur sortiert die 'num' - Mitglied nicht das gesamte Objekt. Die Aufteilung der array von Objekten in einen unteren Bereich, einen Hebel und einen oberen Bereich und rekursiv Sortieren jeder sieht vielversprechend aus, aber ich bin mir nicht sicher, wie die übergabe der Werte funktionieren würde...
Jede Hilfe sehr dankbar. Sorry, wenn dies wurde gebeten vor.
- mögliche Duplikate von c++ - Art mit Strukturen
- +1 ich denke, es ist durchaus eine Frage wie "was ist, wenn ich etwas komplexer als ein array von Werten"? So kann es nützlich sein, darüber nachzudenken, was genau eine Sortier-Funktion, und was eine compare-Funktion im besonderen. Wie kann die Distanz zwischen komplexen Elemente gemessen werden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst müssen Sie eine Funktion schreiben(oder Funktor) auf und vergleichen Sie Ihre Objekte durch was auch immer Wert, den Sie wollen. Es sollten zwei Objekte und liefert ein bool. Es sollte true zurückgeben, wenn die erste sollte vor dem zweiten, andernfalls false. Dann pass auf das std::sort.
<
Betreiber.Können Sie überlastung
operator<
zu vergleichen und das gewünschte Element aus, und verwenden Sie dannstd::sort
.Beachten Sie, dass Sie benötigen zwei zahlen zu initialisieren
Foo
, nicht nur die, die Sie interessiert sind bei der Sortierung.Wenn Sie nicht können oder nicht wollen, um eine überlastung
operator<
fürFoo
andere Optionen umfassen die übergabe eines guten alten C-Stil-Funktion Zeiger oder eine C++ - Stil-Funktion-Objekt als Dritten parameterstd::sort
.Andere alternative ist die Verwendung von std::sort mit einem lambda-Ausdruck:
Wenn Sie hartnäckig auf der Umsetzung Ihrer eigenen quicksort, schlage ich vor, schauen sich dieses video an, um Ihnen zu helfen, sich besser vorzustellen, der Algorithmus. Wenn Sie habe nie geschrieben, eine quicksort-Sie finden es möglicherweise einfacher zu implementieren, nachdem ich es.
http://www.youtube.com/watch?v=vxENKlcs2Tw