Knuth shuffle: Difference between revisions
Content added Content deleted
(Added XPL0 example.) |
|||
Line 5,116: | Line 5,116: | ||
[10, 20] -> [20, 10] |
[10, 20] -> [20, 10] |
||
[10, 20, 30] -> [30, 10, 20] |
[10, 20, 30] -> [30, 10, 20] |
||
</pre> |
|||
=={{header|XPL0}}== |
|||
<lang XPL0>proc Shuffle(Array, Items, BytesPerItem); |
|||
int Array, Items, BytesPerItem; |
|||
int I, J; |
|||
char Temp(8); |
|||
[for I:= Items-1 downto 1 do |
|||
[J:= Ran(I+1); \range [0..I] |
|||
CopyMem(Temp, Array+I*BytesPerItem, BytesPerItem); |
|||
CopyMem(Array+I*BytesPerItem, Array+J*BytesPerItem, BytesPerItem); |
|||
CopyMem(Array+J*BytesPerItem, Temp, BytesPerItem); |
|||
]; |
|||
]; |
|||
string 0; \use zero-terminated strings |
|||
int A; char B; real C; |
|||
int I; |
|||
[A:= [1, 2, 3, 4, 5]; |
|||
Shuffle(A, 5, 4 \bytes per int\); |
|||
for I:= 0 to 5-1 do |
|||
[IntOut(0, A(I)); ChOut(0, ^ )]; |
|||
CrLf(0); |
|||
B:= "12345"; |
|||
Shuffle(B, 5, 1 \byte per char\); |
|||
for I:= 0 to 5-1 do |
|||
[ChOut(0, B(I)); ChOut(0, ^ )]; |
|||
CrLf(0); |
|||
C:= [1., 2., 3., 4., 5.]; |
|||
Shuffle(addr C(0), 5, 8 \bytes per real\); |
|||
for I:= 0 to 5-1 do |
|||
[RlOut(0, C(I)); ChOut(0, ^ )]; |
|||
CrLf(0); |
|||
A:= [10]; |
|||
Shuffle(A, 1, 4 \bytes per int\); |
|||
for I:= 0 to 1-1 do |
|||
[IntOut(0, A(I)); ChOut(0, ^ )]; |
|||
CrLf(0); |
|||
]</lang> |
|||
{{out}} |
|||
<pre> |
|||
2 4 1 5 3 |
|||
1 3 4 5 2 |
|||
5.00000 4.00000 2.00000 1.00000 3.00000 |
|||
10 |
|||
</pre> |
</pre> |
||