Sortieren (Permutation erhalten)
-
hallo
kann ich in java ein array so sortieren, dass ich anstelle des sortierten Array die Permutation bekomme, die mir aus dem unsortierten array ein sortiertes Array erstellt?
z.B.
[3.2 2.1 17.3]
soll folgendes liefern
[1 0 2]
diese Permutation angewendet auf das Array ergibt
[2.1 3.2 17.3]ich brauche dass, weil ich Objekte sortieren will, die selbst nicht Compareable implementieren.
-
Krux schrieb:
ich brauche dass, weil ich Objekte sortieren will, die selbst nicht Compareable implementieren.
Dann bau Dir doch einfach für die Objekte einen Comparator.
-
SG1 schrieb:
Krux schrieb:
ich brauche dass, weil ich Objekte sortieren will, die selbst nicht Compareable implementieren.
Dann bau Dir doch einfach für die Objekte einen Comparator.
das geht nicht, weil die Klasse (es handelt sich um eine Koordinate) nunmal nicht compareable ist.
Dinge die ich brauche:
Array sortiert nach x-koordinate
Array sortiert nach y-koordinate
Array sortiert Sternförmig um eine Koordinate
und vieleicht später mal mehr
-
Krux schrieb:
SG1 schrieb:
Krux schrieb:
ich brauche dass, weil ich Objekte sortieren will, die selbst nicht Compareable implementieren.
Dann bau Dir doch einfach für die Objekte einen Comparator.
das geht nicht, weil die Klasse (es handelt sich um eine Koordinate) nunmal nicht compareable ist.
Ja, und? Genau dafür ist Comparator doch da!
-
Hier das ganze fuer C++, aehnliches geht auch in Java: http://www.developia.de/developia/viewarticle.php?cid=31792 . Wobei einige kleiner Fehler drin sind. Ich moechte aber nicht mehr dran rumfummeln will, da sonst das Layout wieder kaputt geht.
-
Dann helf mir mal bitte
Vertex[] verts; ... Vertex center = verts[0]; float[] values = new float[verts.length]; for (int i = 1; i < values.length; i++){ values[i] = winkel(verts[i],center); } values[0] = Float.NEGATIVE_INFINITY; //wenn es diese teile gäbe wäre mir schon echt mal geholfen int[] permutation = permutationSort(values); verts = applyPermutation(verts,permutation);
class Vertex{ float x,y; //... }
float winkel(Vertex a, Vertex b){ return atan2(b.y-a.y,b.x-a.x); }
-
//wenn es diese teile gäbe wäre mir schon echt mal geholfen int[] permutation = permutationSort(values); verts = applyPermutation(verts,permutation);
Du hoerst nicht zu ... liess meinen Artikel und schaue dir danach Collections.sort(alist, comparator) an bzw. http://java.sun.com/j2se/1.4.2/docs/api/java/util/Comparator.html . Einfach gesprochen: Du implementierst Comparator und hast eine Ordnung, nach der sort deine Elemente ordnet. Du brauchst sort nicht mehr selbst implementieren oder irgend einen anderen Murks mit Permutation machen.
-
nenn meine Permutationen nicht murx, und ich habe deinen Artikel gelesen, ich weiß nur nicht, wie man das in Java machen soll.
-
Krux schrieb:
ich weiß nur nicht, wie man das in Java machen soll.
Mithilfe eines Comparators. Aber das wurde Dir ja nun schon mehrfach gesagt. Sogar die Javadoc wurde Dir verlinkt. Was willst Du noch?