# Sortieren von Daten



## ToBHo (12. Jun 2007)

Hey out there,

Ich gehe momentan in die 11. Klasse des Franz-Stock-Gymnasiums.
Wir müssen eine Datenbank programmieren und stehen gerade vor dem "Sortier"-Problem:

WIr haben verschiedene Daten(Namen,Adressen,Telefon,...) und sollen diese per Java alphabetisch sortieren und ausgeben.

Dieses soll geschehen indem wir die Buchstaben, Zahlen und eventuell Sonderzeichen in Zahlen umwandeln.
Diese werden dann nach Wertigkeit sortiert.
Das Umwandeln von Buchstaben etc. in Zahlen stellt nicht das Problem dar, auch das Sortieren haben wir mit einem BubbleSortierer gelöst.

Aber:
Wie sortier ich dann die Daten?
Wenn a=1 und z=26, dann ist aaaa=1111 und z=26 und stünde somit nach z. Das ist aber genau nicht so.

Ich habe bereits versucht durch den Code von MySQL durchzusteigen, aber irgendwie schaff ichs net^^

Ich bitte um Hilfe, brauche nur ne Idee, programmieren werd ich das dannselber 

Dank euch im Vorraus.
Tobi


----------



## SlaterB (12. Jun 2007)

also ich bezweifle stark, dass du einer Datenbank beibringen kannst,
in der Reihenfolge
a < 4 < k zu sortieren

das ist doch eine Aufgabe für eine Java-Anwendung,

und die Zahlen der Buchstaben soll man wirklich zusammenrechnen?
a < aa < z < aaa < zz < aaaa
?
kompliziert..
damit dürften selbst die Standard-JavaMechanismen wegfallen, die eine beliebige Reihenfolge einzelner Zeichen gestatten


----------



## Ellie (12. Jun 2007)

Falls ich dein Problem richtig verstanden habe: Du brauchst dafür nur ORDER BY (Spaltenname) in die Select-Klausel einzufügen, das macht schon alles richtig.


----------



## Ellie (12. Jun 2007)

Wer lesen kann, ist mal wieder im Vorteil.

Schreib doch bitte etwas mehr dazu, ich verstehe nicht so recht, welche Daten ihr da genau sortiert. Wollt ihr die Werte aller Spalten in einen Topf werfen und sie dann sortieren? Oder warum sonst müsst ihr Strings und Zahlenwerte in der gleichen Spalte betrachten?

Im Übrigen denke ich, dass ihr einfach den falschen Weg gewählt habt. Wäre es nicht sinnvoller, alle Zahlenwerte in Strings umzuwandeln und dann diese zu sortieren? Dafür gibt es zig Mechanismen, sowohl in SQL als uch in Java.


----------



## HoaX (12. Jun 2007)

buchstaben sind doch auch nur zahlen ... 


```
int compare(String s1, String s2) {
    for (int i = 0; i<s1.length(); i++) {
        int c1 = s1.charAt(i);
        int c2 = s2.charAt(i);

        int diff = c1 - c2;
        
        if (diff != 0)
            return diff;
    }
}
```

so in etwa kannst du das in einen Comparator implementieren. alles schreib ich dir nich ... is ja deine aufgabe


----------



## SlaterB (12. Jun 2007)

@ Hoax:
> Wenn a=1 und z=26, dann ist aaaa=1111 und z=26 und stünde somit nach z.



edit:
ach dahinter steht noch
>  Das ist aber genau nicht so. 

na nun spekulier ich mal lieber gar nicht mehr, was überhaupt gemeint ist


----------



## Guest (15. Jun 2007)

Danke für die Antworten.

@HoaX: Ich bin im Standart-Java nicht so bewand da wir in der Schule einige spezielle Bibliotheken benutzen.

@Elli: Wir arbeiten nicht mit speziellen Datenbanken(MySQL, Firebird, Oracle, ...)
@Slater: Im Alphabet steht "aaa" vor "z" deshalb müsste 111 vor 26 stehen. Rein rechnerisch aber nicht  Man müsste natürlich jeden Buchstaben in Zahlen umwandeln.

Ich glaub ich habe eine Lösung dafür gefunden: 
 -Buchstaben in Zahlen umwandelt
 -sie in einem String speichern
 -bei dem kleinsten String solange "00" anfügen bis alle gleichlang sind

Beispiel:
"a" = 01 --> "aaa" = 010101
"z" = 26 --> "z"     = 260000

Damit wäre "aaa" wieder vor "z".

Habe es auch soweit hinbekommen das ich Buchstaben in Zahlen umwandeln kann, das sortieren funktioniert auch perfekt.
Bloß:  Wenn ich meine Funktion in eine Schleife einbaue und als Parameter eine Variabel übergebe(buchstabe="a", buchstabe wird übergeben) nimmt er sie nicht an. Nur wenn ich richtig nen String reinschreibe ("a" wird übergeben) wandelt er es mir um. Warum nimmt er keine Variabeln an? Die Parametertypen sind beide auf String gestellt.

Code muss ich nachreichen. Bin grad in der Schule 

ciao Tobi


----------



## SlaterB (15. Jun 2007)

schaue dir auch die Java-Klassen Collator/ RuleBasedCollator an,
die ermöglicht es, eine beliebige String-Reihenfolge vorzugeben, nach der sortiert wird,

a,1 < b,2 < ..
viele Möglichkeiten, Umlaute und Sonderzeichen, alles beliebig anordbar

-------

ich selber habe mir auch mal einen individuellen Sortierter geschrieben,
mein Vorgehen: ein Array mit einem Wert pro char,

zum Vergleich zweier beliebiger chars einfach ins Array schauen und die Werte vergleichen,
zumindest schneller als die allgemeine Collator-Klasse

falls Interesse besteht, könnte ich das aber frühestens in einer Woche oder so posten, 
im Moment leider nicht, (und bin wohl solange auch nicht mehr hier zugegen)


----------

