Kann man mehrere (drei) Arrays abhängig von einander sortieren?

Loki2

Erfahrenes Mitglied
Hallo

Ich habe drei Arrays.

arr1[]
arr2[]
arr3[]

Diese fülle ich nach einander mit Daten. In arr2 stehen jetzt Zahlen nach dem die Arrays sortiert werden sollen. Also die Einträge in arr2 sollen aufsteigend sortiert werden und die entsprechenden Einträge sollen entsprechend der Sortierung in arr2 mit verschoben werden.

Ich hoffe ich konnte das so erklären das ihr mein Problem versteht.
Ich bin mir fast sicher das es dafür keine wirkliche Lösung gibt und ich mir was anderes überlegen muss. Leider kann ich auch kein 3-dimensionales Array verwenden. Es müssen drei einzelne sein.

Gruß und so
Loki2
 
Es gibt die Klasse java.util.Arrays, die kann Arrays sortieren. System.arraycopy(...) kann einen Array in einen anderen Array kopieren.

Wenn Du allerdings alle 3 auf einmal sortieren willst, mußt Du Dir höchstwarscheinlich wirklich einige eigene Codezeilen überlegen.
 
Ein Beispiel oder sowas in der Art ;)

Code:
    String[] arr1 = new String[2];
    int[] arr2 = new int[2];
    String[] arr3 = new String[2];
    
    arr1[0] = "bla";
    arr1[1] = "blub";
    arr1[2] = "blie";
    
  arr2[0] = 3;
  arr2[1] = 1;
  arr2[2] = 2:
    
  arr3[0] = "du";
  arr3[1] = "die";
  arr3[2] = "da";

So sehen die Arrays ursprünglich aus, jetzt sollen diese nach arr2 sortiert werden so das das ganze so aussieht:

Code:
     arr1[0] = "blub";
     arr1[1] = "blie";
     arr1[2] = "bla";
  
     arr2[0] = 1;
  arr2[1] = 2;
  arr2[2] = 3;
  
  arr3[0] = "die";
  arr3[1] = "da";
  arr3[2] = "du";

Ich hoffe das verdeutlicht mein Problem ein bisschen.

Danke auf jeden Fall schon mal für die Antworten.

Gruß und so
Loki2
 
Ich weiß nicht, ob es in Java bereits fertige Sortieralgortihmen gibt, aber an deiner Stelle würde ich mir Quicksort (oder wenn das Array so klein bleibt tut's auch Bubblesort) anschauen und ne Sort Klasse schreiben. Array2 lässt du dann sortieren und bei jeder Vertauschung (zb Array[1] <=> Array[3]) tauscht du auch Array1 und 3 mit selben Indizes. Sollte eigentlich funktionieren
 
Code:
public class Arraysortieren
{
	public static void main(String[] args)
	{
		int bigger = 0;
		int[] array2 = null;
		int[] array1 = null;
		int[] array3 = null;
		int[] arraysorted = java.util.Arrays.sort(array2);
		
		
		while(arraysorted == array2)
		{
			for(int i=0; i<array2.length;i++)
			{
				for(int l=0; bigger == 0; l++)
				{
					if(array2[i]<=array2[l])
						bigger = 0;
					else
					{
						int array1t= array1[l];
						int array2t= array2[l];
						int array3t= array3[l];
						
						array1[i]=array1[l];
						array2[i]=array2[l];
						array3[i]=array3[l];
						
						array1[l]=array1t;
						array2[l]=array2t;
						array3[l]=array3t;
					}
				}
			}
		}
	}	
}

Mh is noch en fehler drin...
der Rückgabe typ vom sotieren des Arrays ist void und das kann man schlecht zu int machen :| ein ganz dummer fehler, weil ich kA hab wies funktioniert, aber ansonsten müsste es (wenn ich richtig gedacht habe) funktionieren! Also das heißt WENN ich richtig gedacht habe ;)
Naja vlt isses als ansatz ja ganz nett :)
mfg,
Tsa
 
Wäre es da nicht sinnvoller ein Array mit Objekten zu nehmen, und in das Objekt die 3 Felder herein zu tun. Dann könntest du 3 verschiendene Methoden
mit einem Comperator schreiben, welches dir deine Objekt sortiert, wodurch du über das Array in dem die Objekte stehen wieder vollen Zugriff hast.

BSP.:

class element{
public String ar1;
public String ar2;
public String ar3;

public element(String ar1,String ar2, String ar3){
this.ar1 = ar1;
this.ar2 = ar2;
this.ar3 = ar3;
}
}

element[] array = new element[10]; //10 Object vom Typ element

//Elemente füllen

Arrays.sort(array,new Comparator{ //Sortiert alle nach ar1, die anderen zwei Methoden
public void compareTo(Object o1){ //sehen fasst genauso aus
String i = this.ar1;
String j = ((String)o1).ar1;
if(i.compareTo(j) > 0) return 1;
if(i.compareTo(j) < 0) return -1;
return 0;
}
});

Hoffe dass das auch stimmt, und ich dir damit helfen konnte

mfg Master
 
Hi,

danke für eure Antworten. Das hat mir wirklich sehr geholfen.

Schönen Tag euch allen noch.

Gruß und so
Loki2
 
Zurück