![]() |
3 verschiedene Sortierverfahren
Hallo
Hier stelle ich drei verschiedene Sortierverfahren vor, mit denen man Zahlenketten sortieren kann. Zur Eingabe und Ausgabe habe ich einen neuen Type definiert.
Delphi-Quellcode:
n : Anzahl der Zahlen
type tDaten : array [1..n] of integer
Benutzt wird in allen Sortierverahren eine Procedur, die 2 Zahlen mit Hilfe einer Variable vertauscht.
Delphi-Quellcode:
1. Sortieren durch direkte Auswahl
procedure tausche (var a, b : integer);
var hilf: integer; begin hilf := a; a := b; b := hilf; end; Es wird zuerst die Zahl mit dem niedrigsten Wert aus der Zahlenkette rausgesucht. Diese wird dann mit Hilfe eines Dreieckstausches mit der ersten Zahl vertauscht. Die erste Zahl ist dann sortiert. Dann wird aus dem nichtsortierten Teil die niedriegste Zahl rausgesucht und mit der ersten Zahl des nichtsortierten Teiles vertauscht. Das Array ist sortiert, wenn der nichtsortierte Teil nur noch aus einer Zahl besteht.
Delphi-Quellcode:
2. Sortieren durch direktes Einfügen
procedure direkte_Auswahl (Eingabe : tDaten; n : integer; VAR Ausgabe tDaten);
var x, y : integer; begin for x := 1 to n do begin for y := position1 + 1 to n do if Eingabe[y] < Eingabe[x] then tausche (Eingabe[x], Eingabe[y]); end; Ausgabe := Eingabe; end; Die erste Zahl wird als sortiert angesehen. Dann wird die erste Zahl des nichtsortierten Teils genommen und an die richtige Stelle im sortierten Teil eingefügt. Das Array ist sortiert, wenn die letzte Zahl richtig eingefügt worden ist.
Delphi-Quellcode:
3. Bubble-Sort
procedure direktes_Einfügen (Eingabe : tDaten; n : integer; VAR Ausgabe tDaten);
var x, y : integer; begin for x := 1 to n do begin y := x; while Eingabe[y+1] < Eingabe[y] do begin tausche (Eingabe[y], Eingabe[y+1]); if y > 1 then y := pred (y); end; Ausgabe := Eingabe; end; end; Es werden von Anfang an immer zwei nebeneinander liegende Karten verglichen. Liegen sie nicht in der richtigen Reihenfolge werden sie vertauscht. Das wird dann bis zum Ende des Arrays gemacht. Nach dem ersten Durchgang ist die letzte Karte sortiert. Dann wird der erste Schritt bis zum sortierten Teil wiederholt. Der Vorgang wird solange wiederholt, bis bei einem Durchlauf keine Karten mehr vertauscht wurden.
Delphi-Quellcode:
Bei Rückfragen stehe ich gerne zur Verfügung.
Procedure Bubble-Sort (Eingabe : tDaten; n : integer; VAR Ausgabe : tDaten);
var x, y : integer; tausch : boolean; begin y := n; tausch := true; while tausch do begin tausch := false; for x := 1 zo y -1 do if Eingabe[x] > Eingabe[x+1] then begin tausch := true; tausche (Eingabe[x], Eingabe[x+1]); end; y := pred(y); Ausgabe := Eingabe; end; end; Viel Spass beim Sortieren. :coder: [edit=Matze][code]-Tags durch [delphi]-Tags ersetzt und Code formatiert. Mfg, Matze[/edit] |
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz