Algorithmus für Sortierung gesucht

Status
Nicht offen für weitere Antworten.

Fry

Aktives Mitglied
Hallo :)

Eine Frage: Ich habe ein Array von vielen Spalten und Zeilen. Die ersten drei Spalten möchte ich sortieren, in etwa der Sortierungfunktion in Excel. Also Wenn die Spalte 1 nur A,B,C,D,E enthät, sollen erst alle As und dann die zweite und dritte Spalte (passend zu den As) auf oder eben absteigend sortiert werden. Bis alle drei Spalten durch sind.
Verwendet man da jetzt am Besten einen "gewöhnlichen" Algorithmus wie Selection oder Merge und schachtelt diese irgendwie ineinander, oder gibts da was besseres?

Danke
Fry
 

Sky

Top Contributor
Also ich habe sowas mal machen müssen und ich habe mich damals dazu entschlossen einen Index aufzubauen. Wenn Du also neben dein eigentliches Array noch ein zweites eindimensionales int-Array stellst (von der gleichen Länge wie das erste Array). Im "Index-Array" wird nun eingetragen, wo man die zugehörige Zeilen findet. Dadurch muss man nicht die ganze Array-Struktur umkopieren und es kommt nicht mehr so genau auf den Algorithmus an... Das ganze sieht dann in etwa so aus:

Deine erste Spalte im Array sieht so aus: B, A, D, E, C,
Dann sieht dein Index-Array so aus: 1, 0,3,4,2,

Wenn Du nun wissen willst, so der "kleinste Wert ist", so holst Du Dir Index[0] (==1) und Fragst dein Array[1] ab (== A).

Das Problem war, dass das mit den Arrays vorgegeben war. Wenn Du die "Freiheit" hast, die Datentypen selbst festzulegen, so würde ich zu einer Collection greifen und mir einen Comparator schreiben.
 

Fry

Aktives Mitglied
Hi Sky,

mhh habs net ganz verstanden was du meinst. Viellicht habe ich mich auch nur falsch ausgedrückt, oder wirklich nicht verstanden.

Array:
[aaabbc][test4][29834][JavaForum]
[aaabbc][test0][37287][Java]
[aaarbc][test9][33287][Java]
[...]

So mal. jetzt tät ich hergehen und will sortieren. Die ersten beiden Einträge sind schon an der korrekten Stellen, allerdings muss der erste und zweite umgedreht werden, weil test0 vor test4 kommen soll. Wären es noch mehr Einträge müßte dann auch noch weiter hinten getestet werden.

Du meinst ja nun ein Index Array anzulegen. Ich verstehe aber nicht wie du auf die Reihenfolge kommst, ich weiß ja nicht was vorher in dem Array ist. Es kann lang werden, die Spalten sind aber immer fix ( z.B. 15 Einträge, 4 davon zu sortieren).

Inhaltlich kommen nur Strings oder integers dran. Ich kann auf alles zurückgreifen, Perfomrance ist nur zweitragig.
Danke für deine Hilfe!

Fry
 
G

Guest

Gast
Die einfachste Lösung ist bestehenden Code zu verwenden.
Arrays.sort(T[] a, Comparator<? super T> c)

Du brauchst nur den Comparator zu implementieren, Rest geht über
die Implementierung von Arrays.sort, also Quicksort.

Code:
import java.util.*;

public class SortExample {

  public static void main(String[] args) {

    Object[][] array = { 
      {"E", new Integer(1) },
      {"B", new Integer(2) },
      {"A", new Integer(2) }, 
      {"C", new Integer(2) },
      {"A", new Integer(1) }, 
      {"C", new Integer(1) },
      {"D", new Integer(1) },
      {"B", new Integer(1) },
    };
    
    Comparator comparator = new Comparator() {
      public int compare(Object o1, Object o2) {
        return compare((Object[])o1, (Object[])o2);
      }
      
      public int compare(Object[] o1, Object[] o2) {
        // ACHTUNG: Ich gehe hier davon aus, dass alle Werte != null sind !!!
        int result = ((Comparable)o1[0]).compareTo(o2[0]);
        if(result == 0) // Wenn erste Spalte gleich, dann zweite vergleichen
          result = ((Comparable)o1[1]).compareTo(o2[1]);
        return result;
      }
    };
    
    Arrays.sort(array, comparator);
    
    for(int i=0; i<array.length; i++) {
      System.out.println(array[i][0] + "" +array[i][1]);
    }
  }
}
Jetzt noch die zu vergleichenden Indizies einstellbar machen (Parameter an Konstruktor des Comparators)
und Du kannst es beliebig verwenden.
 

Sky

Top Contributor
Fry hat gesagt.:
Hi Sky,

mhh habs net ganz verstanden was du meinst. Viellicht habe ich mich auch nur falsch ausgedrückt, oder wirklich nicht verstanden.

Array:
[aaabbc][test4][29834][JavaForum]
[aaabbc][test0][37287][Java]
[aaarbc][test9][33287][Java]
[...]

So mal. jetzt tät ich hergehen und will sortieren. Die ersten beiden Einträge sind schon an der korrekten Stellen, allerdings muss der erste und zweite umgedreht werden, weil test0 vor test4 kommen soll. Wären es noch mehr Einträge müßte dann auch noch weiter hinten getestet werden.

Du meinst ja nun ein Index Array anzulegen. Ich verstehe aber nicht wie du auf die Reihenfolge kommst, ich weiß ja nicht was vorher in dem Array ist. Es kann lang werden, die Spalten sind aber immer fix ( z.B. 15 Einträge, 4 davon zu sortieren).

Inhaltlich kommen nur Strings oder integers dran. Ich kann auf alles zurückgreifen, Perfomrance ist nur zweitragig.
Danke für deine Hilfe!

Fry
Ok, verstehe jetzt dein Problem (besser).

Warum nimmst Du dann ein Array !? Nimm eine Collection.
 

Fry

Aktives Mitglied
Hallo!

Danke für den Codeschnipsel! Ich verwende ein Array weil ich zuvor diese Daten eingelesen habe, das erschien mir in ein Array am einfachsten und geht auch ganz prima.

Fry
 

Fry

Aktives Mitglied
Hi,

ich lese Daten aus einem BufferedReader ein. Die Daten kommen aus dem Internet. Das ist ein Teil des Programms welches schon fertig ist.

Gruß
Fry
 

Sky

Top Contributor
Fry hat gesagt.:
Hi,

ich lese Daten aus einem BufferedReader ein. Die Daten kommen aus dem Internet. Das ist ein Teil des Programms welches schon fertig ist.

Gruß
Fry
Und warum soll das mit einem Array einfacher sein !? Das habe ich noch nicht verstanden...
 

Fry

Aktives Mitglied
Hallo Sky,

mhhh was heißt einfacher. Sagen wir es so, ich habe es mit einem Array realisiert, weil ich die Datenstruktur kenne und es - mir persönlich - am einfachsten erschien. Es funktioniert und seid dem hab ich es auch nicht wieder angefaßt :wink: aber ich lasse mir auch gerne was neues zeigen :D Also wenn was anderes irgendwie besser ist, könnte ich es nochmal umstellen

Gruß
Fry
 

Sky

Top Contributor
Fry hat gesagt.:
Hallo Sky,

mhhh was heißt einfacher. Sagen wir es so, ich habe es mit einem Array realisiert, weil ich die Datenstruktur kenne und es - mir persönlich - am einfachsten erschien. Es funktioniert und seid dem hab ich es auch nicht wieder angefaßt :wink: aber ich lasse mir auch gerne was neues zeigen :D Also wenn was anderes irgendwie besser ist, könnte ich es nochmal umstellen

Gruß
Fry
Die Sortierung wäre um ein vielfaches einfacher! Ich würde umstellen
 
B

bygones

Gast
würde nicht nur eine Collection nehmen, sonder wenn schon eine List, da dann das sortieren einfach wird ^^.

Mit einer List(z.b. Vector / ArrayList) arbeitest du nahezu wie mit einem Array (da sind eig. Arrays sind -> siehe FAQs). Hast aber den Vorteil, dass du sie problemlos erweitern kannst und sie leicht manipulieren kannst (z.b. sortieren)
 

Fry

Aktives Mitglied
Hallo ihr zwei,

dank schonmal für die Antworten. Ok, also ArrayList nehme ich mal in den Fokus :) um nochmal auf die eigentliche Frage zurückzukommen. Würdet ihr auch sowas wie "Gast" bevorzugen, oder gibt es vielleicht noch was anderes für die SOrtierung?

Gruß+dank
Fry
 
G

Guest

Gast
Fry hat gesagt.:
Hallo ihr zwei,

dank schonmal für die Antworten. Ok, also ArrayList nehme ich mal in den Fokus :) um nochmal auf die eigentliche Frage zurückzukommen. Würdet ihr auch sowas wie "Gast" bevorzugen, oder gibt es vielleicht noch was anderes für die SOrtierung?

Gruß+dank
Fry
Wie ich schon schrieb, Du kannst es noch verallgemeinern.
Code:
import java.util.*;

public class SortTest {
  public static void main(String[] args) {
    Object[][] array = { 
      {"E", new Integer(1) },
      {"B", new Integer(2) },
      {"A", new Integer(2) }, 
      {"C", new Integer(2) },
      {"A", new Integer(1) }, 
      {"C", new Integer(1) },
      {"D", new Integer(1) },
      {"B", new Integer(1) },
    };
    
    Arrays.sort(array, new Array2DComparator(new int[] {0, 1}));
    
    for(int i=0; i<array.length; i++) {
      System.out.println(array[i][0] + "" +array[i][1]);
    }
    System.out.println();

    Arrays.sort(array, new Array2DComparator(new int[] {1, 0}));
    
    for(int i=0; i<array.length; i++) {
      System.out.println(array[i][0] + "" +array[i][1]);
    }
  }
}

class Array2DComparator implements Comparator {
  private int cols[];
  
  public Array2DComparator(int cols[]) throws IllegalArgumentException {
    this.cols = cols;
    if(cols == null || cols.length==0)
      throw new IllegalArgumentException("cols must not be null or empty!");
  }
  
  public int compare(Object o1, Object o2) {
    return compare((Object[])o1, (Object[])o2);
  }
  
  private int compare(Object o1[], Object o2[]) {
    int result = 0;
    for(int i=0; result==0 && i<cols.length; i++)
      result = ((Comparable)o1[cols[i]]).compareTo(o2[cols[i]]);
    return result;
  }
}
Wenn Du einen Sortieralgorithmus selbst implementirst, kommt es letztendlich
auf das gleiche hinaus. Hier brauchst Du nur den vergleichenden Teil zu implementieren
und verwendest bestehenden Code.
Wenn Du Collections verwendest und wenn die darin enthaltenen Objekte
das Comparable-Interface implementieren, dann kannst Du Dir das ganze
sparen.
z.B.
Code:
public class Person implements Comparable {

  String personalNr; // not null Feld
  ...
  public int compareTo(Object o) {
    if(o == null)
      return 1;
    return this.personalNr.compareTo(o.personalNr);
  }
}
Wenn Du aber jetzt nicht gerade nach Personalnummer sortieren möchtest,
sondern z.B. nach Nachnamen, Vorname oder Alter/Geburtsdatum etc., kommst Du
um Comparatoren nicht herum.
 
B

bygones

Gast
Fry hat gesagt.:
dank schonmal für die Antworten. Ok, also ArrayList nehme ich mal in den Fokus :) um nochmal auf die eigentliche Frage zurückzukommen. Würdet ihr auch sowas wie "Gast" bevorzugen, oder gibt es vielleicht noch was anderes für die SOrtierung?
ist schon der richtige Ansatz - schreib dir eine Comparator Klasse o.ä. und bestimme dort wie sortiert werden soll....
 

Fry

Aktives Mitglied
Hoi,

okay, dann dank ich euch allen - besonders auch für die Codestücke - und probiere mein Glück :D
Ihr habt mich schon ein ganzen Stück weitergebracht.

Grüße
Fry
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
L Algorithmus für kürzesten Weg mit Wegpunkten Allgemeine Java-Themen 21
L Algorithmus für Poker-Hände Allgemeine Java-Themen 7
chik 2 return werte für Greedy-Algorithmus (gelöst) Allgemeine Java-Themen 3
M Algorithmus für automatische Zeilenumbrüche Allgemeine Java-Themen 12
C Algorithmus für Array Allgemeine Java-Themen 9
S Algorithmus für Sudoku Allgemeine Java-Themen 17
D Algorithmus für die Erkennung fehlerhafter Eingaben Allgemeine Java-Themen 4
schegga_B AES-Algorithmus in javax.crypto Allgemeine Java-Themen 3
M Laufzeit des Prim Algorithmus Allgemeine Java-Themen 3
O Newton Algorithmus Java Allgemeine Java-Themen 1
CptK Backpropagation Algorithmus Allgemeine Java-Themen 6
N Google Authenticator Algorithmus (SHA1) Allgemeine Java-Themen 1
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
Zrebna Quicksort-Algorithmus - zufälliges Pivot wählen Allgemeine Java-Themen 6
B Algorithmus Warteschlange Ringpuffer wirklich fehlerfrei Allgemeine Java-Themen 8
M Probleme mit Negamax-Algorithmus Allgemeine Java-Themen 29
F Q - Learning Algorithmus Bug Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
M Minmax Algorithmus Verständnisproblem Allgemeine Java-Themen 2
H Rundreise frage (Algorithmus) Allgemeine Java-Themen 18
F KMP-Algorithmus Allgemeine Java-Themen 9
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
P MinMax Algorithmus Allgemeine Java-Themen 0
J Abhängigkeit zwischen Rechenzeit und Speicherbedarf in einen Algorithmus Allgemeine Java-Themen 7
K Djikstra-Algorithmus Allgemeine Java-Themen 1
T Minimax/Alphabeta Algorithmus hängt sich auf (?) Allgemeine Java-Themen 2
M Algorithmus zum Zahlen einteilen Allgemeine Java-Themen 8
O Best Practice Hilfe bei Algorithmus gesucht Allgemeine Java-Themen 10
S Algorithmus um Objekte auf einer Flaeche mit gleichem Abstand anzuordnen..? Allgemeine Java-Themen 20
S Rucksackproblem und genetischer Algorithmus Allgemeine Java-Themen 9
L Abbruch des Algorithmus Allgemeine Java-Themen 8
D Input/Output Ausgleichen chemischer Reaktionsgleichungen mit dem Gauß-Algorithmus Allgemeine Java-Themen 2
Messoras A*-Algorithmus integrieren Allgemeine Java-Themen 3
S Buchscan 3D Dewarp Algorithmus - Ansätze Allgemeine Java-Themen 1
B Verteilungs-/Vergabe-Algorithmus mit abhängigen Score-Werten Allgemeine Java-Themen 3
Androbin "Shunting Yard"-Algorithmus Allgemeine Java-Themen 6
B Algorithmus - Project Euler Problem 18 Allgemeine Java-Themen 2
N Algorithmus zum bewerten von mathematischen Funktionen Allgemeine Java-Themen 11
O Algorithmus Optimierung Allgemeine Java-Themen 3
Joew0815 Algorithmus - Zahlenfolge in 4 ähnliche Teile aufteilen Allgemeine Java-Themen 0
O Tag Cloud Algorithmus Idee gesucht Allgemeine Java-Themen 2
A Implementierung eines Algorithmus (Farthest Insertion zur Lösung des TSP) in O(n²) Allgemeine Java-Themen 2
C Eclipse Probleme bei selbst erstelltem Algorithmus Allgemeine Java-Themen 2
H Graph-Algorithmus gesucht Allgemeine Java-Themen 21
N Algorithmus durch Workflow Allgemeine Java-Themen 7
M tree-based diff Algorithmus (Code-Vergleiche) Allgemeine Java-Themen 3
S Uhrzeit Algorithmus sale Allgemeine Java-Themen 11
N A*-Algorithmus Allgemeine Java-Themen 5
A Suche Algorithmus zum Erstellen eines planaren Graphen Allgemeine Java-Themen 5
F Methoden Algorithmus zur Gegnerfindung (Turnier) Allgemeine Java-Themen 9
T Algorithmus Graph Allgemeine Java-Themen 10
J Algorithmus gesucht (Stringtransformation) Allgemeine Java-Themen 4
B Algorithmus Krankenhausbelegung Allgemeine Java-Themen 17
S Algorithmus von Dijkstra Allgemeine Java-Themen 2
alex_fairytail OOP Banknoten Algorithmus Teil 2 Allgemeine Java-Themen 13
2 ArrayList aktualisieren Algorithmus Allgemeine Java-Themen 11
alex_fairytail Methoden Banknoten Algorithmus Allgemeine Java-Themen 10
R Codehinweise: Algorithmus Größenvergleich von n Zahlen Allgemeine Java-Themen 5
SuperSeppel13 WTF?! Algorithmus-Geschwindigkeitstest Allgemeine Java-Themen 2
C Algorithmus Problem in Minesweeper Allgemeine Java-Themen 5
S Algorithmus um Labyrinth zu erzeugen Allgemeine Java-Themen 6
V Problem mit A* Pathfinder-Algorithmus Allgemeine Java-Themen 2
S Algorithmus um nächst folgende Primzahl zu berechnen Allgemeine Java-Themen 7
S Algorithmus Problem. Rechtecke effizient auf Spielfeld anordnen. Allgemeine Java-Themen 7
C Algorithmus-Hilfe Allgemeine Java-Themen 20
J Algorithmus Längenkombinationen? Allgemeine Java-Themen 7
M Kombinationen über rekursiven Algorithmus berechnen? Allgemeine Java-Themen 10
D Abstruse Probleme mit eigenem replace Algorithmus Allgemeine Java-Themen 11
P RC4 Algorithmus Allgemeine Java-Themen 3
D RSA Verfahren - Erweiterter Euklidischer Algorithmus Allgemeine Java-Themen 4
C IBAN und Bic Validieren (Algorithmus) Allgemeine Java-Themen 10
P Problem mit A*-Algorithmus Allgemeine Java-Themen 12
M Wörter Algorithmus Allgemeine Java-Themen 7
K Postleitzahlen Algorithmus Allgemeine Java-Themen 12
G Problem mit Algorithmus Allgemeine Java-Themen 3
T Hilfe bei einem Algorithmus Allgemeine Java-Themen 2
S Stemming-Algorithmus gesucht (z.B. Porter) Allgemeine Java-Themen 2
RoliMG präfix zu infix algorithmus Allgemeine Java-Themen 6
Z A*-Algorithmus - Probleme mit offener/geschlossener Liste Allgemeine Java-Themen 7
S Javaimplementierung des MD5 Algorithmus Allgemeine Java-Themen 2
E Container-Pack-Algorithmus Allgemeine Java-Themen 4
G k nearest neighbor algorithmus Allgemeine Java-Themen 7
C HASH Algorithmus 2 Strings ergeben das Selbe. Allgemeine Java-Themen 2
P Page Rank Algorithmus implementieren Allgemeine Java-Themen 7
T Problem RSA-Algorithmus in Java? Allgemeine Java-Themen 2
minzel Hash-Algorithmus Allgemeine Java-Themen 9
Y komprimierung mittels Huffman-Algorithmus, bit-shifting. Allgemeine Java-Themen 2
K Algorithmus Allgemeine Java-Themen 10
I Verschlüsselung mit Pwd. - User soll Algorithmus wählen Allgemeine Java-Themen 4
J fällt euch ein Algorithmus ein? Allgemeine Java-Themen 4
N Euklidischer Algorithmus in Java und keine Terminierung. Allgemeine Java-Themen 7
T Algorithmus verbessern Allgemeine Java-Themen 10
U Suche Algorithmus zur bestimmung des längsten Wegs Allgemeine Java-Themen 3
U Ford-Fulkerson Algorithmus gesucht Allgemeine Java-Themen 1
U Dijkstra Algorithmus gesucht Allgemeine Java-Themen 4
I hash-algorithmus Allgemeine Java-Themen 9
Karl_Der_Nette_Anfänger Hat wer ne Lösung für verknüpfte Postleitzahlen? (Baum/Wurzel Struktur) Allgemeine Java-Themen 11
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben