procedure FastPermuteArray(A: TDynIntegerArray); procedure Swap(n, m: integer); var tmp: integer; begin tmp := A[n]; A[n] := A[m]; A[m] := tmp; end; var i: Integer; begin for i := High(A) downto 1 do Swap(i, RandomRange(0, i)); end;