longdonjohnson - Mo 05.12.05 00:25
Titel: 10 Variablen eines Arrays sortieren
hallo erstmal, bin leider noch ein völliger neuling :/
also meine frage ist, wie ich 10 zahlen sortieren kann... ja, ich habe die suche verwendet, ja ich war auf [url]
http://www.sortieralgorhythmen.de[/url] etc. aber es hat nicht geholfen..
was mir helfen würde wäre z.B. ein konkretes beispiel an 4 oder 5 zahlen und nicht irgendwelche begriffe wie quicksort oder bubblesort an den kopf geworfen bekommen ;)
bis jetzt habe ich nur mit randomize 10 unterschiedliche zahlen erstellt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var a,b,c : integer; Zufallszahlen: array [1..10] of byte; begin randomize; for a := 1 to 10 do repeat c :=random(100)+1; for b := 1 to 10 do if Zufallszahlen[b]=c then begin c := 0; end; if c > 0 then Zufallszahlen[a] := c; until c <> 0; end; |
alzaimar - Mo 05.12.05 09:24
So sortiert man einfach (aber langsam):
A ist das Array, das die zu sortierenden Zahlen enthält und N ist die Anzahl der Zahlen. A[0] ist das erste Element.
Wir machen nun Folgendes (A=[5,3,2,8]):
1. Wir definieren uns eine sortierte Teilliste, die von A[0] bis A[j] geht. j ist zunächst 0, denn wir können sagen, das eine Liste, die nur aus einem Element besteht, sortiert ist. (Beispiel: Teilliste = [5], und die ist ja sortiert)
2. Nacheinander werden wir das jeweils nächste Element E in die Teilliste einfügen, das die Liste wieder sortiert ist.
3. Wenn wir mit allen Elementen fertig sind, ist die Liste sortiert.
Der erste Ansatz sieht also so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Procedure Sortiere (A : TArray; N : Integer); Var i : Integer;
Begin j := 0; For i := 1 to N-1 do FuegeSortiertEin (A, i-1, A(i]); End; |
So, jetzt kümmern wir uns um das 'FuegeSortiertEin'. Diese Prozedur soll ein Element in eine Liste an der richtigen Position einfügen. Wenn es also größer als das höchste Element ist, dann muss man es hinter das höchste Element packen, ist es größer als das zweithöchste Element, dann muss man das höchste um eins nach hinten verschieben und das Element da reinschreiben etc.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Procedure FuegeSortiertEin (A : TArray; J, E : Integer); Begin While (J>0) and (A[J]>E) do begin A[J+1] := A[J]; dec (J); End; A[J] := E; End; |