절름발이 프로그래머/Delphi

임의 순열(Random Permutation) 만들기

훅크선장 2011. 5. 9. 16:41
특정 일련 숫자들로부터 임의 순열(즉, 무작위로 뒤섞인 일련의 숫자들)을 만드는 방법입니다.

다음의 예제는 1부터 100까지의 숫자가 일련되어 저장된 배열에서, 순서가 무작위로 뒤바뀐 배열을 만들어냅니다.
SizeofArr 을 바꿔서, 다양한 일련의 숫자를 뒤섞을 수 있습니다.

procedure TForm1.btn2Click(Sender: TObject);
var
  RandomPermutationArray : array of Integer;
  I, J, SizeofArr, RandomPosition, Temp : Integer;
  PrintStr : String;
begin
  SizeofArr := 100;
  SetLength(RandomPermutationArray, SizeofArr + 1); // We need one more space, because number starts 1.

  // array init
  for I := 1 to SizeofArr do
    RandomPermutationArray[I] := I;

  // randoomize Permutation
  for J := 1 to  SizeofArr - 1 do
  begin
    RandomPosition := J + Random(SizeofArr - J) + 1;
    Temp := RandomPermutationArray[J];
    RandomPermutationArray[J] := RandomPermutationArray[RandomPosition];
    RandomPermutationArray[RandomPosition] := Temp
  end;

  PrintStr := '';
  for I := 1 to SizeofArr do
  begin
    PrintStr := PrintStr + ' ' + IntToStr(RandomPermutationArray[I]);
  end;
  edt3.Text := PrintStr;
end;