Перестановка элементов массива

Подскажите пожалуйста, алгоритм или реализацию случайной перестановки элементов массива.
7 ответов

procedure TForm1.FormCreate(Sender: TObject);var dd: array [0..100] of string;temp:string;r1,r2:integer;begin randomize; r1:=random(100); r2:=random(100); temp:=dd[r1]; dd[r1]:=dd[r2]; dd[r2]:=temp;end;
  


Никогда бы не додумался. Надо, наверное, отдохнуть.


Никогда бы не додумался. Надо, наверное, отдохнуть.
Да, просто, как и всё гениальное.    


program ShuffleDemo;{$APPTYPE CONSOLE}uses  Generics.Collections, Generics.Defaults, Types, Math;procedure Shuffle(Data: TIntegerDynArray);begin  TArray.Sort<Integer>(Data, TComparer<Integer>.Construct(    function(const Left, Right: Integer): Integer    begin      Result := RandomRange(- 1, 2);    end)  );end;procedure Print(const Data: TIntegerDynArray; const Text: String = '');var  Value: Integer;begin  Write(Text);  for Value in Data do    Write(Value, ' ');  WriteLn;end;var  Data: TIntegerDynArray;begin  Randomize;  Data := TIntegerDynArray.Create(1, 2, 3, 4, 5);  Print(Data, 'Data: ');  Shuffle(Data);  Print(Data, 'Shuffle: ');  ReadLn;end.
  


*****, да, крутой код, главное - суметь найти эти библиотеки (Generics.Collections).  А уж без модуля Math переставить элементы массива просто нереально.  


главное - суметь найти эти библиотеки (Generics.Collections)
Дженерики появились в Delphi 2009. На днях выходит Delphi 2011. Мой путь ниндзя - использовать современные средства разработки. Как минимум для того, чтобы минимизировать количество "велосипедов" в коде.
А уж без модуля Math переставить элементы массива просто нереально
Модуль Math подключается ради функции RandomRange. Какой код читабельней:
RandomRange(- 1, 2);
или
- 1 + Random(3);
?Мне иногда доставляет код, в котором, встопитсотый раз пишутся функции более чем давно реализованные в RTL.По этим же причинам подключен модуль Types. Ну зачем, зачем описывать тип, когда он уже описан?!Такие дела.


*****Данкинг, думаю, ваш спор неуместен, для начала надо было выяснить версию Delphi у ТС и особенности необходимой ему реализации.А если рассматривать решение сферически в вакууме, я за вариант *****'а