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...)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!