| Autor | Beitrag | 
| locke24 Hält's aus hier
 Beiträge: 2
 
 
 
 
 | 
Verfasst: Sa 04.11.06 13:05 
 
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:
 												| 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. 
          Beiträge: 1876
 Erhaltene Danke: 129
 
 Win 8.1, Xubuntu 15.10
 
 
 | 
Verfasst: 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   .
 Schönes Wochenende,
 Marc | 
|  | 
| locke24  Hält's aus hier
 Beiträge: 2
 
 
 
 
 | 
Verfasst: Sa 04.11.06 14:08 
 
Okay,
 vielen Dank für die schnelle Hilfe!
 | 
|  | 
| Saubäär 
          Beiträge: 376
 
 
 
 
 | 
Verfasst: 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 !     Gruß
 Bäär | 
|  | 
| Marc. 
          Beiträge: 1876
 Erhaltene Danke: 129
 
 Win 8.1, Xubuntu 15.10
 
 
 | 
Verfasst: Sa 04.11.06 15:31 
 
ja, ich weiß
 ich habe mich falsch ausgedrückt   | 
|  | 
| DamienArriens Hält's aus hier
 Beiträge: 2
 
 Win8
 
 
 | 
Verfasst: 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 
 Zuletzt bearbeitet von DamienArriens am Fr 27.04.18 23:32, insgesamt 1-mal bearbeitet
 | 
|  | 
| Gammatester 
          Beiträge: 328
 Erhaltene Danke: 101
 
 
 
 
 | 
Verfasst: 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 Hält's aus hier
 Beiträge: 2
 
 Win8
 
 
 | 
Verfasst: Fr 27.04.18 23:33 
 | 
|  | 
| Gammatester 
          Beiträge: 328
 Erhaltene Danke: 101
 
 
 
 
 | 
Verfasst: Sa 28.04.18 08:31 
 | 
|  | 
| Gausi 
          Beiträge: 8550
 Erhaltene Danke: 478
 
 Windows 7, Windows 10
 D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
 
 | 
Verfasst: 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:
 
 | 11005
 125
 13
 14
 2567
 28
 39876
 41
 |  Sicherlich nicht ganz das, was man von einer sortierten Zahlenfolge erwarten würde.  _________________ We are, we were and will not be.
 | 
|  |