Inisialisasi array 1001 integer dengan nilai 0-1000 dan atur variabel, maks, ke indeks maks saat ini dari array (dimulai dengan 1000). Pilih angka acak, r, antara 0 dan maks, tukar angka di posisi r dengan angka di posisi max dan kembalikan angka sekarang di posisi maks. Mengurangi maks. 1 dan melanjutkan. Ketika max adalah 0, atur max kembali ke ukuran array - 1 dan mulai lagi tanpa perlu menginisialisasi ulang array.
Pembaruan:
Meskipun saya menemukan metode ini sendiri ketika saya menjawab pertanyaan, setelah beberapa penelitian saya menyadari ini adalah versi modifikasi dari Fisher-Yates yang dikenal sebagai Durstenfeld-Fisher-Yates atau Knuth-Fisher-Yates. Karena uraiannya mungkin agak sulit untuk diikuti, saya telah memberikan contoh di bawah ini (menggunakan 11 elemen, bukan 1001):
Array dimulai dengan 11 elemen yang diinisialisasi ke array [n] = n, maks dimulai pada 10:
+--+--+--+--+--+--+--+--+--+--+--+
| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|
+--+--+--+--+--+--+--+--+--+--+--+
^
max
Pada setiap iterasi, angka acak r dipilih antara 0 dan maks, array [r] dan array [maks] ditukar, array baru [maks] dikembalikan, dan maks dikurangi:
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|
+--+--+--+--+--+--+--+--+--+--+--+
...
Setelah 11 iterasi, semua angka dalam array telah dipilih, maks == 0, dan elemen array diacak:
+--+--+--+--+--+--+--+--+--+--+--+
| 4|10| 8| 6| 2| 0| 9| 5| 1| 7| 3|
+--+--+--+--+--+--+--+--+--+--+--+
Pada titik ini, maks dapat diatur ulang ke 10 dan proses dapat dilanjutkan.