Ich möchte eine TStringList sortieren. Die eingebaute sort-Methode ist nicht ausreichend, da, sie nur Strings sortiert (nummerisch oder nach Datum ist schlecht.)
Zu diesem Zweck habe ich mir von
http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/quick/quick.htm
den Quicksort-Algorithmus besorgt und diesen wie folgt angepasst, so dass zum sortieren eine Funktion (hier SortProc) aufgerufen wird, die die TStringListe (hier sortreihe) dann nach verschiedenen Kriterien sortieren kann. Bei nur wenigen Einträgen klappt das auch. Jedoch treten bei mehreren Einträgen Fehler auf (siehe folgende Grafiken):
Hier der Code, der den Quicksort durchführen soll (also die Teilung & Rekursion):
<pre>
void TExtendedStringGrid::Sort(int lo, int hi)
{
//Quicksort
int i=lo,j=hi,t;
int x=(lo+hi)/2;
while(i<=j)
{
t=SortProc(i,x);
while(t<0)
{
i++;
t=SortProc(i,x);
}
t=SortProc(j,x);
while(t>0)
{
j--;
t=SortProc(j,x);
}
if(i<=j)
{
sortreihe->Exchange(i,j);
i++;
j--;
}
}
if(lo<j)
Sort(lo,j);
if(i<hi)
Sort(i,hi);
}
</pre>
Hier die Grafik mit der Ausgangssituation und der Situation nach dem sortieren:
<IMG
SRC="home.snafu.de/christian.marquardt/links.7/gfx.7/bild1,jpg" BORDER="0" ALIGN="LEFT"><IMG
SRC="home.snafu.de/christian.marquardt/links.7/gfx.7/bild1,jpg" BORDER="0">
Woran liegt das schlechte Sortier-Ergebnis??
Danke
Christian
Zu diesem Zweck habe ich mir von
http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/quick/quick.htm
den Quicksort-Algorithmus besorgt und diesen wie folgt angepasst, so dass zum sortieren eine Funktion (hier SortProc) aufgerufen wird, die die TStringListe (hier sortreihe) dann nach verschiedenen Kriterien sortieren kann. Bei nur wenigen Einträgen klappt das auch. Jedoch treten bei mehreren Einträgen Fehler auf (siehe folgende Grafiken):
Hier der Code, der den Quicksort durchführen soll (also die Teilung & Rekursion):
<pre>
void TExtendedStringGrid::Sort(int lo, int hi)
{
//Quicksort
int i=lo,j=hi,t;
int x=(lo+hi)/2;
while(i<=j)
{
t=SortProc(i,x);
while(t<0)
{
i++;
t=SortProc(i,x);
}
t=SortProc(j,x);
while(t>0)
{
j--;
t=SortProc(j,x);
}
if(i<=j)
{
sortreihe->Exchange(i,j);
i++;
j--;
}
}
if(lo<j)
Sort(lo,j);
if(i<hi)
Sort(i,hi);
}
</pre>
Hier die Grafik mit der Ausgangssituation und der Situation nach dem sortieren:
<IMG
SRC="home.snafu.de/christian.marquardt/links.7/gfx.7/bild1,jpg" BORDER="0" ALIGN="LEFT"><IMG
SRC="home.snafu.de/christian.marquardt/links.7/gfx.7/bild1,jpg" BORDER="0">
Woran liegt das schlechte Sortier-Ergebnis??
Danke
Christian
Comment