Initialisieren Sie ein Array mit 1001 Ganzzahlen mit den Werten 0-1000 und setzen Sie eine Variable max auf den aktuellen Max-Index des Arrays (beginnend mit 1000). Wählen Sie eine Zufallszahl r zwischen 0 und max, tauschen Sie die Zahl an der Position r mit der Zahl an der Position max aus und geben Sie die Zahl jetzt an der Position max zurück. Dekrementiere max um 1 und fahre fort. Wenn max 0 ist, setzen Sie max wieder auf die Größe des Arrays - 1 und starten Sie erneut, ohne dass das Array neu initialisiert werden muss.
Update:
Obwohl ich diese Methode bei der Beantwortung der Frage selbst entwickelt habe, stelle ich nach einigen Recherchen fest, dass es sich um eine modifizierte Version von Fisher-Yates handelt, die als Durstenfeld-Fisher-Yates oder Knuth-Fisher-Yates bekannt ist. Da die Beschreibung möglicherweise etwas schwierig zu befolgen ist, habe ich nachfolgend ein Beispiel angegeben (mit 11 Elementen anstelle von 1001):
Das Array beginnt mit 11 Elementen, die mit Array [n] = n initialisiert wurden. Max beginnt mit 10:
+--+--+--+--+--+--+--+--+--+--+--+
| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|
+--+--+--+--+--+--+--+--+--+--+--+
^
max
Bei jeder Iteration wird eine Zufallszahl r zwischen 0 und max ausgewählt, Array [r] und Array [max] werden ausgetauscht, das neue Array [max] wird zurückgegeben und max wird dekrementiert:
max = 10, r = 3
+--------------------+
v v
+--+--+--+--+--+--+--+--+--+--+--+
| 0| 1| 2|10| 4| 5| 6| 7| 8| 9| 3|
+--+--+--+--+--+--+--+--+--+--+--+
max = 9, r = 7
+-----+
v v
+--+--+--+--+--+--+--+--+--+--+--+
| 0| 1| 2|10| 4| 5| 6| 9| 8| 7: 3|
+--+--+--+--+--+--+--+--+--+--+--+
max = 8, r = 1
+--------------------+
v v
+--+--+--+--+--+--+--+--+--+--+--+
| 0| 8| 2|10| 4| 5| 6| 9| 1: 7| 3|
+--+--+--+--+--+--+--+--+--+--+--+
max = 7, r = 5
+-----+
v v
+--+--+--+--+--+--+--+--+--+--+--+
| 0| 8| 2|10| 4| 9| 6| 5: 1| 7| 3|
+--+--+--+--+--+--+--+--+--+--+--+
...
Nach 11 Iterationen wurden alle Zahlen im Array ausgewählt, max == 0, und die Array-Elemente werden gemischt:
+--+--+--+--+--+--+--+--+--+--+--+
| 4|10| 8| 6| 2| 0| 9| 5| 1| 7| 3|
+--+--+--+--+--+--+--+--+--+--+--+
Zu diesem Zeitpunkt kann max auf 10 zurückgesetzt werden und der Vorgang kann fortgesetzt werden.