
uses System.SysUtils;
type
//the algorithm is swappable
TSortStrategy = reference to procedure(
var Items: TArray<Integer>);
procedure Ascending(
var Items: TArray<Integer>);
var
I, J, Tmp: Integer;
begin
for I := High(Items) downto 1 do
for J := 0 to I - 1 do
if Items[J] > Items[J + 1] then
begin
Tmp := Items[J];
Items[J] := Items[J + 1];
Items[J + 1] := Tmp;
end;
end;
var
Strategy: TSortStrategy;
Items: TArray<Integer>;
Number: Integer;
begin
Items := [4, 1, 3];
Strategy := Ascending;
Strategy(Items);
for Number in Items do
Write(Number, ' ');
WriteLn;
//1 3 4
end.