Beim Mischen, also dem gezielten in Unordnungbringen einer sortierten Liste, muss man aufpassen!!
Wenn man falsch mischt, dann ist das Ergebnis mathematisch nicht sauber.
Richtig wird's nur mit
Fisher-Yates-Shuffle
Grundprinzip:
Jede Position im Array darf nur einmal angefasst werden.
Delphi-Quellcode:
// Falsch
// ein Element IntArray[i] kann mehrfach seinen Inhalt wechseln
for i := Low(IntArray) to High(IntArray) do
Swap(i, Random(Length(IntArray)));
// Richtig (Fisher-Yates)
for i := High(IntArray) downto Low(IntArray) do
Swap(i, Random(i+1)+Low(IntArray)));
Er wird Random(i+1) verwendet, weil ein Element auch mit sich selbst getauscht werden darf.