Sortieren im Array

FiselM

Mitglied
Hallo, wie kann ich in einem mehdimmensionalen Feld
in Java sortieren. in einem eindimensionalen Feld geht es.
Java:
public static void main(String[] args)
  {
    int[][] array = {{34,255,255,56},{127,204,11,34},{123,98,127,34},{34,34,127,17}};
    int pos, posMin, min;

    for(int i=0;i<array.length;i++)
    {
        for(int j=0;j<array[i].length;j++)
    {
        posMin = array[0].length ;
        min = array[i][j];
        
        
      System.out.println(posMin);  
      System.out.println(min);
      }
    }

    Arrays.sort(array);
    //System.out.println('\n');
     
    for(int i=0;i<array.length;i++)
    {
        for(int j=0;j<array[i].length;j++)
          //System.out.println(array[i][j]);
        }
 
Zuletzt bearbeitet von einem Moderator:
Die Frage ist, wie du sortieren möchtest. Nur jeweils innerhalb der zweiten Dimension oder auch Dimensionen-übergreifend?
Ersteres könntest du leicht mit der Methode sort() aus der Klasse Arrays lösen:

Java:
int[][] array = {{34,255,255,56},{127,204,11,34},{123,98,127,34},{34,34,127,17}};
for (int[] secDim : array) {
  Arrays.sort(secDim);
}
for (int[] secDim : array) {
  System.out.println(Arrays.toString(secDim));
}
 
Hi,

für eine dimensionsübergreifende Sortierung könntest du alle Einträge in einem einzigen Array zusammenstellen und dieses dann mit Arrays.sort() sortieren...
aus diesem dann wieder ein solches 4x4-Grid zu erstellen ist ja dann auch kein Problem.

Oder hast du spezielle Wünsche an die dimensionsübergreifende Sortierung?


Grüße
Carron
 
Das wäre dann auch mein nächster Punkt, und zwar gibt es da auch wieder zwei Varianten. Erstens - die leichtere -, wenn man davon ausgeht, dass die zweite Dimension immer gleich groß ist, dann kannst du das so machen wie Carron sagt und die zweite Variante wäre schon etwas komplizierter, das könnte mit nem Stack klappen...

Erstmal ein kleines Beispiel zur ersten Variante:

Java:
int[][] array = {{34,255,255,56},{127,204,11,34},{123,98,127,34},{34,34,127,17}};
int secDimSize = array[0].length;
int[] oneDimArray = new int[array.length*secDimSize];

for (int i = 0; i < array.length; i++) {
  for (int j = 0; j < secDimSize; j++) {
    oneDimArray[(i*4)+j] = array[i][j];
  }
}
System.out.println(Arrays.toString(oneDimArray));
Arrays.sort(oneDimArray);
System.out.println(Arrays.toString(oneDimArray));

for (int i = 0; i < array.length; i++) {
  for (int j = 0; j < secDimSize; j++) {
    array[i][j] = oneDimArray[(i*4)+j];
  }
}

for (int[] secDim : array) {
  System.out.println(Arrays.toString(secDim));
}
 
Und hier noch eine Lösung für die zweite Variante und zwar mit einem Stack. Falls du nicht weißt was ein Stack ist, kannst du es dir in der Dokumentation anschauen.

Java:
//Wie du siehst, ist die zweite Dimension nicht überall gleich groß
int[][] array = {{34,255,255,56,20},{127,204,11,34,2,24},{123,98,127,34},{34,34,127,17}};
Stack<Integer> x = new Stack<Integer>();
for (int[] secDim : array) {
  for (int value : secDim) {
    x.push(value);
  }
}

Collections.sort(x);

//Die erste(auskommentierte) Variante sortiert vom groeßten zuerst
//for (int i = 0; i < array.length; i++) {
//  for (int j = 0; j < array[i].length; j++) {
//    array[i][j] = x.pop().intValue();
//  }
//}

//Diese Variante sortiert vom kleinsten zuerst
for (int i = array.length - 1 ; i >= 0; i--) {
  for (int j = array[i].length - 1; j >= 0 ; j--) {
    array[i][j] = x.pop().intValue();
  }
}

for (int[] secDim : array) {
  System.out.println(Arrays.toString(secDim));
}
 
Zurück