@christian87, also die einrückungen im code, helfen vor allem dir, um strukturprobleme sofort zu erkennen um damit nicht stundenlang vor dem debugger zu sitzen.
ausserdem noch ein tipp, mach keine monsterfunktionen, sondern teile sie auf, in kleinere funktionen. so könnte also deine funktion
TForm1.Button1Click(Sender: TObject); aus einem aufruf der funktionen
generiere_array und
sortiere_array bestehen. dein
sortiere_array könnte wiederum aus den funktionen
vergleiche_werte und
tausche_werte bestehen. damit reduzierst du die komplexität und kannst verschiedene komponenten weiterverwenden.
christian87 hat folgendes geschrieben: |
Soll ich jetzt die erste mit allen Vergleichen und immer tauschen? Ich glaub ich hab einfach einen Denkfehler. |
das kommt auf deinen algo drauf an, wenn du die werte immer tauschen möchtest, wenn die bedingung zutriffst, hast den bubblesort, wenn du erst das element finden möchtest um es zum schluss zu tauschen, dann hättest du den selectionsort. beides funktioniert. ich an deiner stelle würd jetzt erst mal versuchen, die funktion so einfach wie möglich hinzubekommen und erst ein einem späteren schritt optimierungen anzugehen. <HTH>
kurzer nachtrag, den folgenden code solltest dir nicht ansehen, sondern selbst die lösung finden.
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: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61:
| procedure TForm1.add_to_box(lb: tListbox; a: array of integer); var i: integer; begin for i := low(a) to high(a) do lb.Items.add(inttostr(a[i])); end;
procedure TForm1.Button1Click(Sender: TObject); var a: array [1..10] of integer; begin qb.Clear; zb.clear;
generiere_array (a); add_to_box(qb, a); sortiere_array(a); add_to_box(zb, a); end;
procedure TForm1.FormCreate(Sender: TObject); begin qb.Clear; zb.clear; randomize; end;
procedure TForm1.generiere_array(var a: array of integer); var i: integer; begin for i := low(a) to high(a) do a[i] := random(100); end;
procedure TForm1.sortiere_array(var a: array of integer); procedure tausch(var a, b: integer); var t: integer; begin t := a; a := b; b := t; end; function IfToSort(a, b: integer): boolean; begin if a < b then result := true else result := false; end;
var i, j: integer; begin for i := low(a) to high(a) do for j := low(a) to high(a) do if ifToSort(a[i], a[j]) then tausch(a[i], a[j]); end; |