Mit die wichtigste Funktion, die DatenBank-Managementsysteme (DBMS) ist das Sortieren von Daten nach bestimmten, vom Benutzer vorgegebenen Kriterien. Delphis Komponenten für StringLists haben zwar die Eigenschaft sorted, sortieren dabei aber Listeneinträge nur alphabetisch. Was macht man z.B., wenn man eine Datei nach dem Alter oder der Gehaltsgruppe sortieren möchte?
Ein klassisches Sortierverfahren zum Sortieren z.B. eines Stapels von Spielkarten basiert auf der folgenden Idee:
In den Spalten der folgenden Tabelle kann man die Entwicklung dieses Algorithmus anhand von 5 Zahlen (jeweils in einer Spalter der Tabelle) verfolgen:
Die Anzahl der Vergleiche (und ggf. Vertauschungen) beträgt im obigen Beispiel 4+3+2+1 = 10. Allgemein muss man bei diesem Verfahren (n-1) + (n-2) +(n-3) + ... + 1 = 0,5*n*(n-1) Vergleiche anstellen, um die Liste zu sortieren. D.h. die Anzahl der Operationen zum Sortieren einer Liste wächst quadratisch mit der Anzahl der Einträge, eine Tatsache, die sich vor allem beim Sortieren längerer Listen unangenehm bemerkbar macht. Es gibt zwar Verfahren, die ein wenig schneller sind, allerdings bleibt es bei der Tatsache, dass Sortieren eine sehr zeitaufwendige Aufgabe ist.
Die folgende Prozedur lässt erkennen, wie man den o.a. Sortieralgotithmus in Pascal implementieren kann:
procedure Sortiere;
var n,m,zw : integer;
begin
for n := 1 to 5-1 do
// n = 5 : Anzahl der Zahlen
for m := 1 to 5-n do begin
if zahlen[m] < zahlen[m+1] then begin
zw := zahlen[m+1];
// zw als Zwischenspeicher
zahlen[m+1] := zahlen[m];
zahlen[m] := zw;
end;
end;
end;
procedure SortiereNachNamen;
var n,m : integer;
zwds : TDAtenSatz;
begin
for n := 1 to 5-1 do
// n = 5 : Anzahl der Datensätze
for m := 1 to 5-n do begin
if datei[m].name < datei[m+1].name then begin
zwds := datei[m+1];
// zwds als Zwischenspeicher
datei[m+1] := datei[m];
datei[m] := zwds;
end;
end;
end;
Erweitere das Programm datei2.pas um die fehlenden Routinen bzw. erweitere Deine eigene Datenbank um die Optionen 'Sortieren' und 'Filtern'.
© Dietrich Praclik