Entwickler-Ecke
Algorithmen, Optimierung und Assembler - BubbleSort Probleme
CurdledMilk - Mi 30.11.05 18:34
Titel: BubbleSort Probleme
Hallo!
Ich habe Versucht einen BubbleSort Alg. zu schreiben. Doch leider Sortiert der nich.
Hier is der Quelltext des Sortieralg. Ich hoffe ihr könnt mir Helfen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.sortieren; var max, n, s,i,c : integer; a: array[1..256] of integer;
begin max := tab.colcount; for i:=1 to max do begin a[i]:=strtoint(tab.Cells[i,1]); end; for n:=1 to max do begin for s:= 1 to n-1 do begin if a[s] > a[s+1] then begin a[s] := a[s+1]; end end; end; for c:=1 to max do begin tab.cells[1,c]:=inttostr(a[c]); end; |
muschelschubser - Mi 30.11.05 18:55
Holla,
ich mag mich irren, aber muss du die Zellen nicht vertauschen statt einfach nur nach unten zu verschieben:
Delphi-Quelltext
1: 2: 3: 4: 5:
| if a[s] > a[s+1] then begin a[s] := a[s+1]; end |
also sowas wie:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| if a[s] > a[s+1] then begin Temp := a[s]; a[s] := a[s+1]; a[s+1] := Temp; end |
oder eleganter eine kleine "switch" funktion bauen und dann:
Delphi-Quelltext
1: 2: 3: 4: 5:
| if a[s] > a[s+1] then begin switch(a[s],a[s+1]); end |
gruß,
schubser
CurdledMilk - Mi 30.11.05 19:07
jo klar stimmt schon, danke ... aber jetzt ist das Problem noch viel problematischer.
der sortiert jetzt fehlerhaft... grad gegen Ende kommt es immer wieder zu Fehlern. Also der Sortiert z.B. 100 werte richtig und dann kommen z.B. wieder ein Paar niedrigere werte
mein Quelltext jetzt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure TForm1.sortieren; var max, n, s,i,c, sp : integer;
a: array[1..256] of integer;
begin max := tab.colcount; for i:=1 to max do begin a[i]:=strtoint(tab.Cells[i,1]); end; for n:=1 to max do begin for s:= 1 to n-1 do begin if a[s] > a[s+1] then begin sp:= a[s]; a[s] := a[s+1]; a[s+1] := sp; sp:= 0; end end; end; for c:=1 to max do begin tab.cells[c,1]:=inttostr(a[c]); end;
end; |
muschelschubser - Do 01.12.05 11:45
Titel: Hm... hier wirst du geholfen ;-)
Hallo,
ich glaub der Fehler steckt hier:
Quelltext
1: 2:
| for n:=1 to max do begin for s:= 1 to n-1 do begin |
Wieso sortierst du nur bis n-1 und vor allem von "unten" beginnend?
Du musst eigentlich so vorgehen, das im ersten Durchlauf das höchste element ganz "nach oben" sortiert wird. Dann im zweiten durchgang das zweithöchste bis auf den "vorletzten" Platz, usw...
Also erste "Aussenschleife" bis max, zweite Aussenschleife bis max-1, dritte bis max-2, ...
Dieser Beitrag erklärt das eigentlich ganz gut:
Bubblesort + optimierter Bubblesort [
http://www.delphi-forum.de/viewtopic.php?p=202554#202554]
Damit sollte dir dann geholfen sein.
gruß,
schubser
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!