Entwickler-Ecke

Sonstiges (Delphi) - Problem mit Sortier Algorithmus


Lemartes - Fr 27.08.04 15:19
Titel: Problem mit Sortier Algorithmus
Ok, hier mein kleiner Sortieralgorithmus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
for p:=1 to 5 do
repeat
begin
     tausch:=0;
     for o:= 0 to stringgrid1.rowcount-2 do
          if ord((stringgrid1.cells[0,o])[p]) = ord((stringgrid1.cells[0,o+1])[p]) then
             if ord((stringgrid1.cells[0,o])[p+1]) > ord((stringgrid1.cells[0,o+1])[p+1]) then
             begin
              tausch:= tausch+1;
              for k:= 0 to 4 do
              temp[k]:=stringgrid1.cells[k,o+1];
              for l:= 0 to 4 do
              stringgrid1.cells[l,o+1]:= stringgrid1.cells[l,o];
              for m:= 0 to 4 do
              stringgrid1.cells[m,o]:=temp[m];
             end;
end;
until tausch=0;


der funktioniert ganz gut dachte ich, aber nur wenn der Fall nicht eintritt, dass zwar der Buchstabe vor dem zu vergleichendem gleich is, die davor aber nicht mehr! ok, ich blick den Satz selbst net, also ein Beispiel:

ich habe: Garfield und Hacker (is mir so beim rumprobieren eingefallen...)
Normal wäre ja, dass Garfield vorne steht, aber er zieht Hacker nach vorne, da er nur überprüft, ob der 2. Buchstabe gleich ist, den ersten aber ausser Acht lässt. Aber mir fällt kein weg ein, wie ich das Prob beheben kann... Weiß einer Rat?


.Chef - Fr 27.08.04 16:15

Zieht er es wirklich nach vorne oder steht es schon da? Wie ich das sehe, überprüfst du den 1. Buchstaben nur auf Gleichheit und nicht, ob auch er schon kleiner ist. Das machst du dann erst beim zweiten...


Lemartes - Fr 27.08.04 17:56

Ach ja, ich hätte erwähnen sollen, dass der erste Buchstabe schon durch Bubblesort sortiert wird...
also: Die Einträge sind schon nach dem ersten Buchstaben sortiert, wenn das losgeht.


Keldorn - Fr 27.08.04 19:32

Ich seh in deinem Code nicht durch

Zitat:

for p:=1 to 5 do
...
if ord((stringgrid1.cells[0,o])[p]) = ord((stringgrid1.cells[0,o+1])[p]) then

was hat die p-schleife zu sagen? Du sortiert doch 4xumsonst und dann beim 5. mal nach dem 5+6. Buchstaben, und das nur, wenn der 5. Buchstabe gleich ist.

warum nicht ein einfacher stringvergleich? If 'Garfield'<='Hacker' then, reicht doch auch?

hier ist noch was fertiges: http://www.swissdelphicenter.ch/de/showcode.php?id=449

Mfg Frank


Lemartes - Fr 27.08.04 21:08

das vergleicht b(=buschstabe)1, wenn gleich, sortiert es nach b2
vergleicht b2, sortiert ach b3,
das ganze bis 5 und 6
er sollte b1 vergleichen, b2 sortieren
b1 vergleichen, b2 vergleichen, b3 sortieren...


is aber eh egal, geht mit AnsiStrlComp VIEL kürzer, aber das scheint keiner hier zu kennen... (hat ich mal in nem anderem topic gefragt...)