Zurück zu den Projekten
archiviert 2021

RadixSort

Radixsort Visualisierer als Lazarus Desktopanwendung in Object Pascal.

RolleDesktopentwickler StackLazarus · Object Pascal · LCL

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.
3Sortierpässe
10Zahlen
10Buckets / Pass
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.