Array nach Elementwerten sortieren?

berndoa

Top Contributor
Hallo,
ich habe bei eienr Aufgabe aktuell ein sehr langes Array, das int Werte speichert.
Und hätte gerne eine Liste der Indizes, deren Werte absteigend sortiert sind.
Also wenn ich das Array {13,6,55,1} und damit die index-wert-paare
0 13
1 6
2 55
4 1

habe, will ich hinterher die Liste {2,0,1,4} haben.
Halt "nach der 2. Spalte sortiert" sozusagen.

Gibts irgendeinen smarten Weg, das zu lösen?

Wie die EIngabgeliste gegeben ist, kann ich bei Bedarf noch ändern in ein ArrayList oder irgendwas Anderes, falls es das Sortieren hier erleichtert.
 
Das Hauptproblem dürfte sein, Boxing zu vermeiden. Daher würde ich mal einen
Java:
interface IntComparator {
    int compare(int v1, int v2);
}
einführen und eine allgemeine Sortiermethode schreiben:
Java:
int[] sort(int[] values, IntComparator c) {
    // hier mal eine einfache Bubblesort-Implementierung nach Wikipedia
    int n = values.length;
    boolean swapped;
    do {
        swapped = false;
        for (int i = 0; i < n-1; i++) {
            if (c.compare(values[i], values[i+1]) > 0) {
                int swap = values[i];
                values[i] = values[i+1];
                values[i+1] = swap;
                swapped = true;
            }
        }
        n--;
    } while (swapped);
    return values;
}
die dann verwendet werden kann, um z. B. Indizes zu sortieren:
Java:
public int[] sortIndices(int[] values) {
    int[] indices = new int[values.length];
    for (int i = 0; i < indices.length; i++) {
        indices[i] = i;
    }
   return sort(indices, (v1, v2) -> Integer.compare(values[v1], values[v2]));
}
 

Neue Themen


Zurück
Oben