procedure Shuffle(var S: array of Integer); var I, J: Integer; T: Integer; L: Integer; begin Randomize; L := Length(S); for I := 0 to L - 1 do begin J := Random(L - I); //在所剩下的范围内 T := S[L - I - 1 + Low(S)]; S[L - I - 1 + Low(S)] := S[J + Low(S)]; S[J + Low(S)] := T; end; end; { Shuffle }
这段是调用函数的 n := Redit1.Lines.Count - 1; SetLength(arrSuff, n); Shuffle(arrSuff); for i := 0 to Length(s) do begin Redit2.Lines.Add(Redit1.Lines.Strings[arrSuff[i]]); end; 这段是加在你给我的函数里面的
procedure Shuffle(var S: array of Integer); var I, J,K: Integer; T: Integer; L: Integer; begin Randomize; L := Length(S); for i:=0 to L-1 do s[i]:=i; for i:=0 to L-1 do begin j:=Random(L); k:=Random(L); T:=s[j]; S[j]:=s[K]; s[k]:=T; end; end; { Shuffle }
procedure TForm1.Button1Click(Sender: TObject); var i: Integer; arrSuff: array of Integer; begin SetLength(arrSuff, Redit1.Lines.Count); for i := 0 to Redit1.Lines.Count - 1 do arrSuff[i] := i; Shuffle(arrSuff); Redit2.Clear; for i := 0 to Redit1.Lines.Count - 1 do Redit2.Lines.Add(Redit1.Lines[arrSuff[i]]); end;
var
I, J: Integer;
T: Integer;
L: Integer;
begin
Randomize;
L := Length(S);
for I := 0 to L - 1 do begin
J := Random(L - I); //在所剩下的范围内
T := S[L - I - 1 + Low(S)];
S[L - I - 1 + Low(S)] := S[J + Low(S)];
S[J + Low(S)] := T;
end;
end; { Shuffle }
要在程序前面加上
randseed(gettickcount());
这样随机就不同了
n := Redit1.Lines.Count - 1;
SetLength(arrSuff, n);
Shuffle(arrSuff); for i := 0 to Length(s) do
begin
Redit2.Lines.Add(Redit1.Lines.Strings[arrSuff[i]]);
end;
这段是加在你给我的函数里面的
var
I, J,K: Integer;
T: Integer;
L: Integer;
begin
Randomize;
L := Length(S);
for i:=0 to L-1 do
s[i]:=i; for i:=0 to L-1 do
begin
j:=Random(L);
k:=Random(L);
T:=s[j];
S[j]:=s[K];
s[k]:=T;
end;
end; { Shuffle }
谢谢 : hiflower(花) 、 zswangII(伴水清清)(一贴不灌,何以灌天下?) 和大家!
var
i: Integer;
arrSuff: array of Integer;
begin
SetLength(arrSuff, Redit1.Lines.Count);
for i := 0 to Redit1.Lines.Count - 1 do
arrSuff[i] := i;
Shuffle(arrSuff); Redit2.Clear;
for i := 0 to Redit1.Lines.Count - 1 do
Redit2.Lines.Add(Redit1.Lines[arrSuff[i]]);
end;