Ich versuche, ein Array von ganzen Zahlen zu sortieren (zu verkleinern), aber den ursprünglichen Index zu verfolgen.
Ich meine, zum Beispiel, wenn ich dieses Array habe:
%Vor%nach der Verwendung von Arrays.sort (b, Collections.reverseOrder ()) wird es zu (Ich verwende Arrays.sort, weil in diesem Beispiel b nur die Länge 5 ist, aber in meinem Problem könnte die Länge von b 1 & lt; b.Länge & lt; 70
sein %Vor%aber ich möchte irgendwie den ursprünglichen Index haben, ich meine das zu wissen
%Vor%Ich weiß nicht, ob meine Frage klar ist, bitte frag mich alles. Ich habe dieses Stück Code in C ++, das hilfreich sein kann, weil es tut, was ich will
%Vor%Die Sache ist, nachdem das getan ist, hat tord das Array geordnet nach Index, das heißt:
%Vor% Versuchen Sie, Paare von (value, index)
nach Wert sortiert zu sortieren:
Dann, wenn Sie sortieren werden:
%Vor% Nun haben Sie ein Array von Pair
-Objekt geordnet nach value
absteigend. Jedes Objekt enthält außerdem index
- die Stelle im ursprünglichen Array.
P. S. Ich schrieb das Beispiel in Java, da die Frage java
-Tag hat. Obwohl in C++
die Idee die gleiche ist, ist nur die Implementierung ein wenig anders.
Im Beispiel des OP-Posters wurde ein Array mit Ganzzahlen sortiert. Wenn einer der Leser eine ähnliche Situation hat, aber mit einem Array von nicht-primitiven Typen, ist die folgende Klasse eine Klasse, die dies für Arrays von Nicht-Primitiven behandelt. Die Klasse geht etwas anders vor. Es belässt das ursprüngliche Array unverändert, erstellt aber stattdessen ein Array von Indizes und sortiert es aus und gibt dieses zurück.
%Vor%Und um es schnell anzurufen, können Sie so etwas tun:
%Vor%Bearbeiten: Wenn Sie die Methode Arrays.sort (int []) erneut implementieren möchten, können Sie die Erstellung und Verwendung von Integer-Objekten vermeiden. Dies kann ansprechend sein.
Die folgende Antwort enthält die wichtigsten Schritte, um das in der Frage erläuterte Problem zu lösen, ohne dass ein Detailcode bereitgestellt wird.
Class
erstellen, die zwei Attribute value
und index
hat. Dabei ist value
der ursprüngliche Attributwert und index
ist die Position vor dem Sortieren. ArrayList
dieses Class
. Class
mit den gewünschten value
und index
. Hinweis: Eine Möglichkeit, den index
-Wert festzulegen, besteht darin, die Arraylist
zu durchlaufen und den Wert von index
mit dem Schleifenindex festzulegen.
Sortieren Sie die Arraylist
mithilfe von Comparable
basierend auf value
-Attribut.
Nun können Sie nach dem Sortieren das vorherige index
eines beliebigen Eintrags kennen, indem Sie das Attribut index
aufrufen.