vector von vector sortieren

Status
Nicht offen für weitere Antworten.

Corcovado

Bekanntes Mitglied
Hallo,

Ich habe einen Vector A von Vectoren B. Ich moechte alle Elemente (also die Vectoren B) in Vector A nach dem 3. Element von B sortieren.
Wie mache ich das?

Bsp:
Vector B sind enthaelt immer 10 Zahlen, ein Vector A enthaelt nun 50 verschiedene B. diese 50 versch. B sollen nun immer nach der 3. Zahl von B in A sortiert werden. (ich hoffe es ist nicht zu kryptisch).


Danke
 
ich versteh zwar net genau, wie du sortieren willst, aber schreib dir einen Comparator... in dem sortierst du die beiden Elemente (also bei dir die Vectoren) nach deinen Wünschen

dann kannst du über das Collections Framework die sort methode nutzen (COllections.sort(List l, Comparator c) oder so)
 
Was für Zahlen sollen denn in deinem Vector B gespeichert werden? Sollen sie vom Dateintyp int, double, float, long, ... sein ?

Finde das ziemlich umständlich das mit Vektoren zu machen. Klar es geht, aber dazu musst du halt wissen, dass in einem Vektor nur Object-Klassen gespeichert werden können und du dabei viele Sachen beachten musst.
 
So, habe dir mal eine Methode geschrieben, die das gewünschte macht. Sie arbeite nach dem Selectionsort und istsicherlich nicht sehr effizient, aber für keine Vectoren müsste es reichen. Du musst allerdings darauf achten, dass dein Vector vA wieder aus Vektoren besteht und diese müssen alle mindestens die Länge pos haben. Die Varaiable pos bestimmt nach welchem Index du sortieren möchtest und da man in Java bei 0 anfängt zu zählen, musst du für den 3. Index sorted(Vector vA, 2) aufrufen.


Code:
	public static Vector sorted(Vector vA, int pos){
		int[] entry = new int[vA.size()];
		int[] pointer = new int[vA.size()];
		
		for(int k = 0; k < entry.length; k++){
			pointer[k] = k;
			Vector b = (Vector)vA.get(k);
			entry[k] = ((Integer)b.get(pos)).intValue();
		}
		
		for(int k = 0; k < entry.length; k++){
			for(int h = k + 1; h < entry.length; h++){
				if(entry[k] > entry[h]){
					int dp = pointer[k];
					pointer[k] = pointer[h];
					pointer[h] = dp;
					int de = entry[k];
					entry[k] = entry[h]; 
					entry[h] = de;
				}
			}

		}		
		Vector sort = new Vector();
		for(int k = 0; k < pointer.length; k++){
			sort.add((Vector)vA.get(pointer[k]));
		}
		return sort;
	}

So, hoffe ich konnte helfen.
 
@DeathByAClown:
Danke, ich glaub den Tipp hattest Du mir erst gestern gegeben 😉 Mir is, als Java-Neuling nur noch nicht ganz klar, wie das geht, hab aber dazu auch schon was gefunden. Ich dachte vielleicht gibts noch was anderes... ach ja, ich wollte auf-/oder absteigend sortieren - war das missverstaendlich?!

@Gaeste
Danke fuer die Muehe, ich finde es echt cool von Euch/Dir extra nen Algorithmus implementiert zu bekommen. Allerdings denke ich, dass es nicht unbedingt foerderlich ist immer das Rad neu zu erfinden. Es ist sicherlich sinnvoll sich mit Suchalgorithmen beschaeftigt zu haben. Aber es ist halt schneller einen schon fertigen zu benutzen, es ist uebersichtlicher, das Programm wird auch (oft) sicherer und schneller laufen mit einem fertigen und man kann sich auf andere wesentlichere Besonderheiten beim Code konzentrieren. Naja und es sind auch recht viele Daten, also braeuchte ich schon eher mind. nen einfachen Quicksort, aber egal, Danke trotzdem. - die Zahlen sollten double sein. 😉

Ich werde mich mal mit Comparatoren auseinandersetzen, das scheint die gaengigste Methode zu sein. Vielleicht weiss ja dazu noch jemand was... 🙂
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben