tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
298
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    FiselM FiselM ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Beiträge
    78
    Hallo, wie kann ich in einem mehdimmensionalen Feld
    in Java sortieren. in einem eindimensionalen Feld geht es.
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    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]);
            }
    Geändert von zerix (19.06.10 um 19:36 Uhr) Grund: Code-Tags eingefügt
     

  2. #2
    Matt297 Matt297 ist offline Mitglied Gold
    Registriert seit
    Oct 2008
    Beiträge
    180
    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:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    
    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));
    }
     

  3. #3
    FiselM FiselM ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Beiträge
    78
    Die Sortierung sollte Dimmensionsübergreifend erfolgen.
     

  4. #4
    Avatar von Carron
    Carron Carron ist offline Mitglied Silber
    Registriert seit
    May 2010
    Ort
    Berlin
    Beiträge
    61
    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
     

  5. #5
    Matt297 Matt297 ist offline Mitglied Gold
    Registriert seit
    Oct 2008
    Beiträge
    180
    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:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    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));
    }
     

  6. #6
    Matt297 Matt297 ist offline Mitglied Gold
    Registriert seit
    Oct 2008
    Beiträge
    180
    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.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    //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));
    }
     

Ähnliche Themen

  1. String-Array nach Int-Array sortieren
    Von Wolfy0013 im Forum Java
    Antworten: 5
    Letzter Beitrag: 06.05.10, 17:05
  2. Assoziatives Array (Zeilen Array) sortieren
    Von Gladiator6 im Forum PHP
    Antworten: 10
    Letzter Beitrag: 03.06.09, 00:36
  3. Antworten: 5
    Letzter Beitrag: 24.09.08, 00:10
  4. Array sortieren -> 2tes array angleichen
    Von ali-gator im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 27.10.06, 15:07
  5. Antworten: 1
    Letzter Beitrag: 08.01.03, 22:10