Ich bin letztens über einen "interessanten" Sortieralgorithmus gestolpert (
http://dis.4chan.org/read/prog/1295544154). Diesen habe ich mal spasseshalber in Delphi implementiert.
Bitte nicht in Produktionscode benutzen!
Delphi-Quellcode:
program Sleepsort;
var
items: TArray<integer>;
i: integer;
begin
randomize;
writeln('Random: ');
setlength(items, 25);
for i := 0 to High(items) do
begin
items[i] := random(length(items) * 4);
write(IntToStr(items[i]) + ' ');
end;
writeln;
writeln('Sorted: ');
for i := 0 to high(items) do
begin
TSortThread.Create(items[i]);
end;
readln;
end.
Delphi-Quellcode:
unit uSortThread;
interface
uses
Classes;
type
TSortThread =
class (TThread)
private
fValue : integer;
protected
procedure Execute;
override;
public
constructor Create(n : integer);
end;
implementation
uses SysUtils;
constructor TSortThread.Create(n: integer);
begin
inherited Create;
fValue := n;
end;
procedure TSortThread.Execute;
begin
sleep(fValue * 333);
write(IntToStr(fValue)+'
');
end;
end.
Erst hatte ich versuch das mit anonymen Threads zu machen, aber das wollte nicht so recht klappen:
Delphi-Quellcode:
TThread.CreateAnonymousThread(
procedure
begin
sleep(items[i] * 333);
write(IntToStr(items[i]) + ' ');
end).Start;
Die anonyme Methode wird erst ausgeführt, nachdem die for-schleife verlassen wurde. i ist dann 25 und items[i] zeigt auf den Speicherbereich hinter dem array.