Autor Beitrag
Lemartes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40


D7 Prof
BeitragVerfasst: Fr 27.08.04 15:19 
Ok, hier mein kleiner Sortieralgorithmus:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40


D7 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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: www.swissdelphicente.../showcode.php?id=449

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Lemartes Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40


D7 Prof
BeitragVerfasst: 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...)