Wie man ein Array sortiert und den Index in Java verfolgt

8

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%     
neteot 10.05.2014, 23:15
quelle

3 Antworten

15

Versuchen Sie, Paare von (value, index) nach Wert sortiert zu sortieren:

%Vor%

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.

    
Alexey Malev 10.05.2014, 23:26
quelle
0

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.

    
user3624334 11.05.2014 01:17
quelle
0

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.

  • Sie können eine benutzerdefinierte Class erstellen, die zwei Attribute value und index hat. Dabei ist value der ursprüngliche Attributwert und index ist die Position vor dem Sortieren.
  • Erstelle ein ArrayList dieses Class .
  • fügen Sie die neuen Objekte des erstellten Class mit den gewünschten value und index .
  • hinzu

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.

    
Salman 11.05.2014 05:55
quelle

Tags und Links