Entwickler-Ecke
Sonstiges (Delphi) - Kleines Problem beim Sortieren
Cash - Mo 17.03.03 18:28
Titel: Kleines Problem beim Sortieren
Hi@all
Ich möchte gern Strings in einer Listbox sortieren. Die items sind "Eins" , "ZWei" , "drei" , usw. bis "zehn".
Links daneben ist ein Button, der beim clicken die Liste sortieren soll.
Es soll aber die rekrusive Form vom QUICKSORT-Verfahren angewendet werden.
So sieht mein Quelltext aus es fehlen einige Dinge;
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: 27: 28: 29: 30:
| procedure TFrmQuicksort.BTTStartClick(Sender: TObject); begin
end; Function Partition( l,r : Integer ) : Integer; var v,t,i,j : Integer; Begin v:= Data[r]; i:= l-1; j:= r; Repeat Repeat inc( i ); Until (Data[i] >= v); Repeat dec( j ); Until (Data[j] <= v); t:= Data[i]; Data[i]:= Data[j]; Data[j]:= t; Until (j<=i);
Data[j]:= Data[i]; Data[i]:= Data[r]; Data[r]:= t; Result:= i; End;
Procedure QuickSort( l,r : Integer ); var i : Integer; Begin If (r > l) Then Begin i:= Partition( l, r); QuickSortRekursiv( l, i-1 ); QuickSortRekursiv( i+1, r ); End; End; |
zu dem hoffe ich das einer von euch eine kleine demo machen könnte, das Project zippen und mir per E-Mail schicken könnte :)
danke für jede Hilfe.[/code]
mars - Mo 17.03.03 22:05
Zudem hast du unter Demos auch ein Beispielprogrammm, welches Quick-, Bubble- und noch irgendein -Sort gegeneinander antreten lässt. Ich glaube, es ist unter Threads zu finden.
Ich weiss nicht, wie dein Programm aufgebaut ist, aber vielleicht hilft es dir auch zu wissen, dass StringList schon ein eingebautes Quicksort und CustomSort hat...
Cash - Mo 17.03.03 22:24
Hier der Quelltext den ich eingegeben habe:
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: 27: 28:
| procedure TFrmQuicksort.BTTStartClick(Sender: TObject); begin Quicksort; end; Procedure Quicksort (l,r: integer);;
var i,j,Mitte,Merke : Integer;
begin i:=l; j:=r; Mitte:=Listbox1.items[(l+r) div 2]; repeat while Listbox1.items[i]<Mitte do Inc(i); while Mitte<Listbox1.items[j] do Dec(j); if i<=j then begin Merke:=Listbox1.items[i]; Listbox1.items[i]:=Listbox1.items[j]; Listbox1.items[j]:=Merke; Inc(i); Dec(j); end; until i>j; if l<j then QuickSort (l,j); if i<r then Quicksort (i,r);
end; |
Meine Frage: Wo ist der Fehler? Denn sobald ich das Programm starte, wird es genauso schnell wieder beendet, ohne das er mir einen Fehler anzeigt. Woran liegt das?
Luncustaf - Di 18.03.03 09:19
| Cash hat folgendes geschrieben: |
Hier der Quelltext den ich eingegeben habe: 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: 27: 28:
| procedure TFrmQuicksort.BTTStartClick(Sender: TObject); begin Quicksort(l,r); //übergib hier mal für l und r zwei werte da die andere procedure ja sonst nichts zu tun hat. end; Procedure Quicksort (l,r: integer);;
var i,j,Mitte,Merke : Integer;
begin i:=l; j:=r; Mitte:=Listbox1.items[(l+r) div 2]; repeat while Listbox1.items[i]<Mitte do Inc(i); while Mitte<Listbox1.items[j] do Dec(j); if i<=j then begin Merke:=Listbox1.items[i]; Listbox1.items[i]:=Listbox1.items[j]; Listbox1.items[j]:=Merke; Inc(i); Dec(j); end; until i>j; if l<j then QuickSort (l,j); if i<r then Quicksort (i,r);
end; |
Meine Frage: Wo ist der Fehler? Denn sobald ich das Programm starte, wird es genauso schnell wieder beendet, ohne das er mir einen Fehler anzeigt. Woran liegt das? |
[/b]
Cash - Di 18.03.03 15:32
Hi,
jetzt hab ich es so eingegeben, aber er meckert mir jetzt folgendes an:
[Error] mQuicksort.pas(33): Undeclared identifier: 'Listbox1'
Ich habe aber eine Listbox die so heisst mit Items.....
Was ist zu tun?
derDoc - Di 18.03.03 16:50
Ist nur so eine Idee: Da gehört ein
TFrmQuicksort. (oder wie das Ding auch immer heißt) davor:
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: 27: 28: 29: 30: 31: 32:
| private procedure Quicksort(l, r: integer);
.......
procedure TFrmQuicksort.Quicksort (l, r: integer); var i, j, Mitte, Merke: integer; begin i := l; j := r; Mitte := Listbox1.Items[(l + r) div 2]; repeat while Listbox1.Items[i] < Mitte do Inc(i); while Mitte < Listbox1.Items[j] do Dec(j); if i <= j then begin Merke := Listbox1.Items[i]; Listbox1.Items[i] := Listbox1.Items[j]; Listbox1.Items[j] := Merke; Inc(i); Dec(j); end; until i > j; if l < j then QuickSort (l, j); if i < r then Quicksort (i, r); end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!