Array Indizes sortieren

W

Wishmaster51

Gast
Hallo,
Ich habe das Anliegen, dass ich zu einem gegebenen double[] Array eine (absteigend) sortierte Liste int[] der Indizes benötige. In der Java-API habe ich dazu nichts gefunden, und auch im Internet gibt es zwar einige Ansätze, aber optimal wäre für mich eine fertige Bibliothek.

Feature Request: Get sorted list of indices of an array | Java.net
Java Array sort: Quick way to get a sorted list of indices of an array - Stack Overflow
java - Get the indices of an array after sorting? - Stack Overflow
 
M

Marcinek

Gast
Also du kannst deine doublewerte mit deren aktuellen index in einem Objekt kapseln. dann sorierst du diese anhand der doublewerte.

Oder du sortierst deine doublewerte und bildest jede sortierung auf ein array 1...n ab. Dann hast du die sortierten index.
 
W

Wishmaster51

Gast
AHm, notfalls könnte ich es auch selbst schreiben, ich wollte nur mal nachschauen, ob es für so etwas schon eine fertig geschriebene Methode irgendwo gibt.
 

Timothy Truckle

Top Contributor
Hallo,
Ich habe das Anliegen, dass ich zu einem gegebenen double[] Array eine (absteigend) sortierte Liste int[] der Indizes benötige.
Vielleicht verstehe ich ja Deine Anforderung einfach nicht, aber ein Index in einem Array ist die Position eines Eintrags in diesem Array. Du willst also ein zusätzliches Array anlegen, in dem die einzelnen Positionen extra abgelegt sind? Mal abgesehen davon, dass das mit Array anlegen und for Schleife 'n 3-Zeiler ist, wozu braucht man dass?

bye
TT
 

DrZoidberg

Top Contributor
Hallo,
Ich habe das Anliegen, dass ich zu einem gegebenen double[] Array eine (absteigend) sortierte Liste int[] der Indizes benötige. In der Java-API habe ich dazu nichts gefunden, und auch im Internet gibt es zwar einige Ansätze, aber optimal wäre für mich eine fertige Bibliothek.

Da ich gerne Werbung für Scala mache, erwähne ich einfach mal, dass dieses Problem in Scala ein Einzeiler ist.
Code:
list.zipWithIndex.sortBy(- _._1).map(_._2)
 
F

fdhalkwdoph

Gast
Da ich gerne Werbung für Scala mache, erwähne ich einfach mal, dass dieses Problem in Scala ein Einzeiler ist.
Code:
list.zipWithIndex.sortBy(- _._1).map(_._2)

Naja, für alle die Scala nicht kennen ist das eher ein "dafuq? o_O" und keine Werbung. Wenn du schon mit solchen Einzeilern Werbung machen möchtest, solltest du es auch erläutern. :)
 
W

Wishmaster51

Gast
Vielleicht verstehe ich ja Deine Anforderung einfach nicht, aber ein Index in einem Array ist die Position eines Eintrags in diesem Array. Du willst also ein zusätzliches Array anlegen, in dem die einzelnen Positionen extra abgelegt sind? Mal abgesehen davon, dass das mit Array anlegen und for Schleife 'n 3-Zeiler ist, wozu braucht man dass?
Also, ich brauche eigendlich nur die Reihenfolge der Indizes, so dass die zugehörigen Einträge absteigend sortiert sind.

Die Anwendung dahinter ist jetzt etwas aufwendig zu erklären, aber ich habe da noch ein zweites Array der selben Länge, das ich in der Reihenfolge ablaufen will, in der das erste Array sortiert ist. Warum ich das machen will würde nun wirklich zu weit führen...

Ich würde eben ungern nochmal schreiben wenn jemand bereits eine getestete Klasse dafür hat. ;)
 

Timothy Truckle

Top Contributor
Also, ich brauche eigendlich nur die Reihenfolge der Indizes, so dass die zugehörigen Einträge absteigend sortiert sind.
Nochmal deutlich zum Mitschreiben:
Die Indizes in einem Array sind per Definiton aufsteigend und lückenlos aufeinanderfolgend, und sie existieren nicht physisch in der Struktur
Code:
Array
.

Die Liste der Indizes in einem (Java-)Array ist also immer die Folge der natürlichen Zahlen beginnend bei 0 (wobei die Gelehrten noch Streiten ob 0 eine natürlich Zahl ist) bis einschließlich
Code:
Länge des Arrays - 1
.

Ich weiß wirklich nicht was Du da noch sortieren willst bzw. musst, oder wieso Du erwartest, dass diese Reihenfolge sich ändern könnte...

bye
TT
 
W

Wishmaster51

Gast
Dass die Indizes selbst lückenlos sind ist mir schon klar.

Beispiel:
Java:
double[] arr = {6,4,5};
Wenn ich das nun absteigend sortieren möchte, dann ist das Ergebnisarray {6,5,4} und der Indexvektor, an dem ich interessiert bin, ist dann
Java:
sort = {1,3,2}
So dass eben sort[0] (=1) den Index des größten Wertes aus arr liefert, sort[2] (=3) würde mir den Index des zweitgrößten Elementes liefern usw...
 
Zuletzt bearbeitet von einem Moderator:

DrZoidberg

Top Contributor
So etwa?
Java:
double[] array = new double[100];
for(int i = 0; i < array.length; i++) {
    array[i] = Math.random();
}

double[][] numberPlusIndex = new double[array.length][];
for(int i = 0; i < array.length; i++) {
    numberPlusIndex[i] = new double[] {array[i], i};
}
Arrays.sort(numberPlusIndex, new Comparator<double[]>() {
    public int compare(double[] npi1, double[] npi2) {
        if(npi2[0] < npi1[0]) return -1;
        else if(npi2[0] > npi1[0]) return 1;
        else return 0;
    }
});
for(double[] npi: numberPlusIndex) {
    System.out.println("Number = " + npi[0]);
    System.out.println("Index = " + (int)npi[1]);
    System.out.println();
}
 

Timothy Truckle

Top Contributor
Dass die Indizes selbst lückenlos sind ist mir schon klar.

Beispiel:
Java:
double arr = {6,4,5};
Wenn ich das nun absteigend sortieren möchte, dann ist das Ergebnisarray {6,5,4} und der Indexvektor, an dem ich interessiert bin, ist dann
Java:
sort = {1,3,2}
So dass eben sort[0] (=1) den Index des größten Wertes aus arr liefert, sort[2] (=3) würde mir den Index des zweitgrößten Elementes liefern usw...
Da kommen wir doch der Sache schon näher.

Was Du willst ist also eigentlich den Double- Werten eine ID zuweisen, die die Eingangsreihenfolge widerspiegelt und später diese ID wieder ermitteln zu können.

Das schreit nach einem DTO:
Java:
class DoubleWithId implements Comparable<DoubleWithId >{
  private static final Random TEST_DATA = new Random(new Date().getTime());
  private final int id;
  private final double wert;
  public DoubleWithId (int id, double wert){
    this.id = id;
    this.wert = wert; 
  }
 
  public int compareTo(DoubleWithId  o){
    return Double.valueOf(wert).compareTo(Double.valueOf(o.wert));
  }
  public int getId() { return id; }  
  public double getWert() { return wert; }

  public static void main(String[] args){
    List <DoubleWithId> myList = new ArrayList<>();
    while (100<myList.size()){
       myList.Add(new DoubleWithId (myList.size(), TEST_DATA.nextDouble()*100));
    }
   Collections.sort(myList);
   Collections.reverse(myList);
   for(DoubleWithId  doubleWithId  : myList){
     System.out.println("Wert "+doubleWithId.getWert() + " hat ID "+ doubleWithId.getId());
   }

  };

bye
TT
 
Zuletzt bearbeitet:
W

Wishmaster51

Gast
Da kommen wir doch der Sache schon näher.

Was Du willst ist also eigentlich den Double- Werten eine ID zuweisen, die die Eingangsreihenfolge widerspiegelt und später diese ID wieder ermitteln zu können.
Ja, genau, ich habe hier ein Rucksackproblem, von denen der Array, den ich sortieren will, die Werteffizienz der Objekte (Nutzen pro Gewichtseinheit) angibt, und der andere Array gibt mir das Gewicht an.

Nun will ich im ersten Schritt einen Greedy-Algorithmus umsetzen, d.h. ich verwende zuerst das Objekt mit der größten Werteffizienz, dann das zweitgrößte....Dazu brauch ich eben die Umindizierung.

Danke für eure Codestücke, werde mir das mal ansehen :)
 
G

Gast2

Gast
Ja, genau, ich habe hier ein Rucksackproblem, von denen der Array, den ich sortieren will, die Werteffizienz der Objekte (Nutzen pro Gewichtseinheit) angibt, und der andere Array gibt mir das Gewicht an.

Nun will ich im ersten Schritt einen Greedy-Algorithmus umsetzen, d.h. ich verwende zuerst das Objekt mit der größten Werteffizienz, dann das zweitgrößte....Dazu brauch ich eben die Umindizierung.
Poste sowas das nächste mal direkt im ersten Post, dann hätte man sich das ganze gerate in den vorherigen Posts sparen können.

Anstatt mit zwei Arrays rumzuhantieren solltest du Gewicht und Nutzen in einer Klasse kapseln und diese Objekte in eine Liste legen. Mit nem entsprechenden Comparator kannst du das ganze dann z.b. nach Gewicht sortieren.
 

Landei

Top Contributor
Wenn es keine Duplikate unter den doubles gibt...

Java:
    public static int[] indexes(double values[]) {
        TreeMap<Double,Integer> map = new TreeMap<Double, Integer>();
        for(int i = 0; i < values.length; i++) {
            map.put(values[i], i);
        }
        int[] result = new int[map.size()];
        int i = 0;
        for(Integer value : map.values()) {
            result[i++] = value;
        }
        return result;
    }
 
W

Wishmaster51

Gast
Danke für eure Antworten. Muss mir noch überlegen, wie genau ich es implementiere. :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Signifikante Array-Indizes finden Allgemeine Java-Themen 3
B zwei-dimensionale Collections bzw. Array mit Indizes Allgemeine Java-Themen 3
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
LucasGlockner Effizienter byte-Zugriff auf ein long[]-Array Allgemeine Java-Themen 8
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
M Queue mit einem Array implemetieren Allgemeine Java-Themen 16
M Array Rang eines Elements Allgemeine Java-Themen 4
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
noah1407 Array Allgemeine Java-Themen 3
D Methoden Teil-Array mit Maximalwert bestimmen Allgemeine Java-Themen 23
N einem Array Objekte hinzufügen die ihr Array position gespeichert haben Allgemeine Java-Themen 34
N zweidimensionalen Array in dreidimensionalen Array speichern Allgemeine Java-Themen 4
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
L Array und Index Allgemeine Java-Themen 26
L die 3 größten Zahlen im Array Allgemeine Java-Themen 1
G jToggleButton in Array/ArrayList Allgemeine Java-Themen 12
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
Willi.We Array sortieren Allgemeine Java-Themen 5
gotzi242 Array Summe bestimmen tipps? Allgemeine Java-Themen 14
H Matrix ohne Array erstellen Allgemeine Java-Themen 9
Aboya Char Array rekursiv vergleichen Allgemeine Java-Themen 15
V4ll3.Wff Array in Java Allgemeine Java-Themen 4
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
H Array Sportschütze Allgemeine Java-Themen 6
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
M Array verändern Allgemeine Java-Themen 1
A JavaFX 2 dimensionales array Allgemeine Java-Themen 1
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Array dynamisieren oder ArrayList verwenden? Allgemeine Java-Themen 17
M Java 2D Array für ein Grid erstellen ? Allgemeine Java-Themen 2
H Array mit dem Datentype String[] initializieren Allgemeine Java-Themen 7
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
N Byte Array in Java "dekomprimieren" Allgemeine Java-Themen 3
parrot Array Aufgabe Allgemeine Java-Themen 3
N String Array Eingabe Allgemeine Java-Themen 6
R Warum wird mir in der Konsole das "Standard Array" ausgegeben? Allgemeine Java-Themen 2
N Variablen Array Länge ändern. Allgemeine Java-Themen 8
D Kgv aller Paare aus einem Array mit n integer berechnen Allgemeine Java-Themen 5
W Enumeration ein Array/List als Eigenschaft mitgeben - warum geht das nicht? Allgemeine Java-Themen 0
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
A Array Problem Allgemeine Java-Themen 8
Drachenbauer Wie stelle ich fest, ob ein Objekt in meinem Array vorkommt? Allgemeine Java-Themen 5
F Datei in String-Array einlesen Allgemeine Java-Themen 8
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
I Array Parameter mit 2 Klassen - NullPointerException Allgemeine Java-Themen 3
X Größten Werte in meinem Array löschen? Allgemeine Java-Themen 16
E Angabe wie groß Array sein soll und in for-schleifen diesen Array füllen Allgemeine Java-Themen 3
F 3 Dimensionales Array mit Allgemeine Java-Themen 9
M Steueralgorithmus verwandelt Array in Anfangszustand Allgemeine Java-Themen 9
W Array vs. ArrayList vs. HashMap Allgemeine Java-Themen 20
D Datentypen 2-3 Baum erstellen mit geordnetem int-array Allgemeine Java-Themen 0
T Objekt in Array packen Allgemeine Java-Themen 6
M Zahlen in Array anordnen Allgemeine Java-Themen 8
M Eclipse Unvollständigen Array ansteuern Allgemeine Java-Themen 2
D Erste Schritte Im Array Werte tauschen Allgemeine Java-Themen 5
Xge For/Array Error: IndexOutOfBounds Allgemeine Java-Themen 4
M Wie kann ich ein int[] Array in einer Methode benutzen? Allgemeine Java-Themen 6
FRI3ND Datentypen Date-Array sortieren - Text mitnehmen? Allgemeine Java-Themen 7
D Integer-Array variabler Größe mit Zahlen befüllen (Schleifen) Allgemeine Java-Themen 0
J Variablen Array ertellen bei model.put Allgemeine Java-Themen 13
S Eindimensionales Array in zweidimensionales Array speichern Allgemeine Java-Themen 5
R convert 2d array list to 2d array Allgemeine Java-Themen 1
J json Array würfel Spalten durcheinander Allgemeine Java-Themen 9
MiMa Array umbau oder Alternative? Allgemeine Java-Themen 5
L Datentypen 3D Array Allgemeine Java-Themen 3
M 2D Array mit unterschiedlichen Längen erstellen und befüllen Allgemeine Java-Themen 11
Mario1409 Methoden JSON Array von URL Allgemeine Java-Themen 8
E Swing Array mit Bildern in GUI darstellen Allgemeine Java-Themen 2
P Array einer abstrakten Klasse Allgemeine Java-Themen 4
H Zweidimensionales Array - Zellen der Tabelle verbinden Allgemeine Java-Themen 2
M Zweidimensionales Array mit Binärzahlen füllen Allgemeine Java-Themen 8
M Array aus Thread Objekten erstellen Allgemeine Java-Themen 2
kodela Dynamisches Array in einer Klasse Allgemeine Java-Themen 5
G Array ohne Aufzählungszeichen ausgeben Allgemeine Java-Themen 6
J Wie kann ich ein Java Array als Säulendiagramm ausgeben? Allgemeine Java-Themen 2
Z 2D Array Pixels reparieren Allgemeine Java-Themen 2
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
B Polibios Array erweitern Allgemeine Java-Themen 1
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
J Array-List Bubble-Sort Allgemeine Java-Themen 12
4 Variablen Int-Array Int Zuweisen Allgemeine Java-Themen 7
J Array Allgemeine Java-Themen 8
Z Array mit unterschiedlichen Werten Allgemeine Java-Themen 1
L sortiertes Array im main aufrufen klappt nicht. Allgemeine Java-Themen 3
O Mein JButton Array funktioniert nicht Allgemeine Java-Themen 3
A Mit dem letzten bis zum ersten Wert aus Array rechnen Allgemeine Java-Themen 15
A Vector Strings in Array splitten Allgemeine Java-Themen 6
I Muster in Array suchen Allgemeine Java-Themen 10
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
S Variablen String[] Array per schleife in int[] einlesen Allgemeine Java-Themen 8
B Zahlen manuell eingeben und in Array Speichern Allgemeine Java-Themen 2
R Wärmeleitung, 3d-Array Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben