heute bin ich in diesem Blogartikel (https://www.hostblogger.de/blog/archive ... psort.html) über das SleepSort-Verfahren gestolpert und war so begeistert, dass ich gleich eine FPC-Varianten davon implementiert habe. Die ich euch natürlich nicht vorenthalten möchte:
Code: Alles auswählen
program SleepSort;
{$MODE ObjFpc}
{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}CThreads,{$ENDIF}{$ENDIF}
Classes, SysUtils;
type
TSleepSortThread = class(TThread)
private
Value: Integer;
protected
procedure Execute; override;
public
constructor Create(AValue: Integer);
end;
procedure TSleepSortThread.Execute;
begin
Sleep(Value * 1000);
WriteLn(Value);
end;
constructor TSleepSortThread.Create(AValue: Integer);
begin
inherited Create(False);
Self.FreeOnTerminate := True;
Value := AValue;
end;
procedure SleepSort(Integers: array of Integer);
var
Element, Highest: Integer;
begin
Highest := 0;
for Element in Integers do begin
TSleepSortThread.Create(Element);
if Element > Highest then Highest := Element;
end;
Sleep((Highest * 1000) + 250);
end;
begin
SleepSort([9, 12, 1, 4, 3, 7]);
end.
Besonders effizient ist das natürlich nicht und im praktischen Einsatz kann es durchaus mal schiefgehen (falls die Threads sich gegenseitig überholen). Als Spielerei aber ganz nett.