Autor Beitrag
CurdledMilk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Mi 30.11.05 18:34 
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.

ausblenden 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..256of 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+1then
    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
Hält's aus hier
Beiträge: 11

Win 2000, Win XP
D7 Prof
BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
    
if a[s] > a[s+1then
    begin
    a[s] := a[s+1];
end


also sowas wie:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  
if a[s] > a[s+1then
    begin
    Temp := a[s];
    a[s] := a[s+1];
    a[s+1] := Temp;
    end


oder eleganter eine kleine "switch" funktion bauen und dann:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
    
if a[s] > a[s+1then
    begin
    switch(a[s],a[s+1]);
end



gruß,
schubser
CurdledMilk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: 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:

ausblenden 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..256of 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+1then
    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
Hält's aus hier
Beiträge: 11

Win 2000, Win XP
D7 Prof
BeitragVerfasst: Do 01.12.05 11:45 
Titel: Hm... hier wirst du geholfen ;-)
Hallo,

ich glaub der Fehler steckt hier:

ausblenden 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

Damit sollte dir dann geholfen sein.

gruß,
schubser