archiviert 2021
RadixSort
Radixsort Visualisierer als Lazarus Desktopanwendung in Object Pascal.
01 · Überblick
Lazarus Desktopanwendung, die den Radixsort Algorithmus schrittweise visualisiert. Zehn zufällig generierte Zahlen (0 bis 999) werden in einer StringGrid angezeigt und in drei Durchläufen nach Einer, Zehner und Hunderterstelle in Buckets verteilt und wieder eingesammelt. Zwei Modi stehen zur Verfügung: Schritt für Schritt mit sieben geführten Phasen und ein Direktsortiermodus.
Highlights
- Schrittweise Visualisierung aller drei Sortierpässe (Einer, Zehner, Hunderter).
- Zwei Betriebsmodi: geführter Schritt für Schritt Ablauf und Direktsortierung.
- Interaktive Demo direkt im Browser nachvollziehbar.
02 · Wirkung
3Sortierpässe
10Zahlen
10Buckets / Pass
03 · Architektur
04 · Datenmodell
05 · Interaktive Demo
06 · Quellcode
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Grids, ExtCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; // Schritt-fuer-Schritt Modus starten Button2: TButton; // Direkt sortieren Button3: TButton; // Beenden Button4: TButton; // Schritt 1: zufaellige Zahlen Button5: TButton; // Schritt 2: 1. Pass (Einerstelle) Button6: TButton; // Schritt 3: Array uebertragen Button7: TButton; // Schritt 4: 2. Pass (Zehnerstelle) Button8: TButton; // Schritt 5: Array uebertragen Button9: TButton; // Schritt 6: 3. Pass (Hunderterstelle) Button10: TButton; // Schritt 7: Finales Array StringGrid1: TStringGrid; Label1: TLabel; Label2: TLabel; private public end; var Form1: TForm1; zahlen: array[0..9] of integer; implementation {$R *.lfm} procedure TForm1.Button4Click(Sender: TObject); var i: byte; begin randomize; for i := 0 to 9 do begin stringgrid1.cells[i, 0] := inttostr(random(999)); zahlen[i] := strtoint(stringgrid1.cells[i, 0]); end; end; { Schritt 2: 1. Pass - nach Einerstelle in Buckets verteilen } procedure TForm1.Button5Click(Sender: TObject); var i, x, q: integer; ende: boolean; begin for i := 0 to 9 do begin ende := false; q := 2; if length(inttostr(zahlen[i])) = 2 then x := strtoint(copy(inttostr(zahlen[i]), 2, 1)) else if length(inttostr(zahlen[i])) = 3 then x := strtoint(copy(inttostr(zahlen[i]), 3, 1)) else x := strtoint(copy(inttostr(zahlen[i]), 1, 1)); repeat if stringgrid1.cells[x, q] = '' then begin stringgrid1.cells[x, q] := stringgrid1.cells[i, 0]; ende := true; end else q := q + 1; until ende = true; end; end; { Schritt 3-7 analog: einsammeln, naechste Stelle, einsammeln, ... } end.