Entwickler-Ecke
Sonstiges (Delphi) - Zahlen per Bubblesort sortieren
locke24 - Sa 04.11.06 13:05
Titel: Zahlen per Bubblesort sortieren
Ich möchte in einer Listbox Zufallszahlen erzeugen, die dann per bubblesort sortiert werden sollen, um in einer anderen Listbox ausgegeben zu werden.
Mein Quellcode sieht so aus:
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: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| procedure bubblesort; const anz= 50; var feld1: array [1..anz] of integer; i: integer; anzahl:integer; k:integer;
begin for i:=1 to (anz-1) do begin for anzahl:= 50 downto (i+1) do begin if feld1[k] > feld1[k-1] then begin feld1[k]:= feld1[k-1]; END; Form1.ListBox2.Items.Add(IntToStr(feld1[k-1]));
end; end; end;
procedure TForm1.Button2Click(Sender: TObject); begin close end; procedure TForm1.Button3Click(Sender: TObject); const max=50; var zahlfeld: array [1..50] of integer; i:integer; begin randomize ; for i:=1 to 50 do zahlfeld[i]:= random(50)+1; for i:=1 to 50 do Form1.Listbox1.Items.Add(IntToStr(zahlfeld[i]));
end;
end. |
Nun ja, also das mit den Zahlen sortieren funktioniert ja, aber die bubblesort prozedur muss ja dann mit den Zahlen aus der ersten Listbox arbeiten, nur ich weiß nicht, was ich in der Prozedur schreiben muss, damit sie diese Zahlen dann auch verwendet. Das ist eigentlich im Moment mein größtes Problem. Vielleicht funktioniert das ganz ja auch überhaupt nicht so, wie ich es mir vorgestellt habe...im Moment bin ich so ziemlich verwirrt, deshalb wäre ich für nützliche Hinweise sehr dankbar. Ähm ja schönes Wochenende noch
Moderiert von Gausi: B- durch Delphi-Tags ersetzt
Moderiert von Tino: Titel geändert.
Marc. - Sa 04.11.06 13:10
Hallo,
Bitte benutze doch die Delphi-Tags [delphi
] [/delphi]!
Du musst ja irgendwo angeben,
was sortiert werden soll, in diesem Fall den Inhalt deiner Listbox:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| Function BubbleSort(Items: TStrings): TStrings; var done: boolean; i, n: integer; Dummy: string; begin n := Items.Count; repeat; done := true; for i := 0 to n - 2 do if Items[i] > Items[i + 1] then begin Dummy := Items[i]; Items[i] := Items[i + 1]; Items[i + 1] := Dummy;
done := false; end; until done; result := Items; end; |
Aufruf dann mit
Delphi-Quelltext
1:
| listbox2.Items := Bubblesort(Listbox1.Items); |
Sortiert allerdings beide Listboxen :roll:.
Schönes Wochenende,
Marc
locke24 - Sa 04.11.06 14:08
Okay,
vielen Dank für die schnelle Hilfe!
Saubäär - Sa 04.11.06 15:21
Quelltext
1:
| Sortiert allerdings beide Listboxen :roll:. |
Nur ListBox1 wird sortiert aber du ordnest ListBox2 ja auch eine sortierte Liste (ListBox1) zu ! :wink:
Gruß
Bäär
Marc. - Sa 04.11.06 15:31
ja, ich weiß
ich habe mich falsch ausgedrückt ;)
DamienArriens - Fr 27.04.18 17:02
Ich Habe eine viel einfachere Variation für die die es später mal brauchen.
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.bubblesort; var a,b,dummy:string; anzahl:integer; i,j:integer; begin
anzahl := (listbox1.items.count - 1);
for j := 1 to anzahl do begin
for i := 1 to anzahl do begin a := listbox2.Items[i-1]; b := listbox2.Items[i];
if a < b then begin dummy:=a; listbox2.items[i-1]:=b; listbox2.items[i]:=dummy; end; end; end; end; |
Wenn man in der Liste die kleinste Zahl/String oben haben will muss man nur das Vorzeichen bei "a < b" umdrehen.
Moderiert von Christian S.: Quote- durch Delphi-Tags ersetzt
Gammatester - Fr 27.04.18 18:33
DamienArriens hat folgendes geschrieben : |
Ich Habe eine viel einfachere Variation für die die es später mal brauchen. Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.bubblesort; var a,b,dummy:string; anzahl:integer; i,j:integer; begin
anzahl := (listbox1.items.count - 1);
for j := 1 to 100 do ... end; | |
Einfacher vielleicht,
aber dafür fehlerhaft. Wenn die Anzahl der notwendigen kompletten Durchläufe 100 überschreitet, hast Du eine Liste, die nicht komplett sortiert ist. Das wird zB ziemlich sicher der Fall sein, wenn die Liste invers sortiert ist und die Anzahl größer als 101 ist.
Edit: Wenn anderseits die Liste bereits sortiert ist, machst Du 99 Durchläufe für die Katz.
DamienArriens - Fr 27.04.18 23:33
Tut mir leid hatte vergessen die '100' mit 'anzahl' auszutauschen dann geht es perfekt
Gausi - Mo 30.04.18 13:51
Nuja, diese neue Variante ist aus mehrerlei Hinsicht nicht so optimal.
Zum einen wird dort in der Sortiermethode auch noch direkt auf die visuellen Komponenten zugegriffen, was man in der Regel vermeiden sollte. Zum anderen geht es hier laut dem Threadtitel von vor 12 Jahren darum,
Zahlen zu sortieren. Du sortierst aber
Strings.
Mit deiner Prozedur sortierst du also sowas:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| 1 1005 125 13 14 2567 28 39876 41 |
Sicherlich nicht ganz das, was man von einer sortierten Zahlenfolge erwarten würde. ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 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!