Data update
This commit is contained in:
parent
8e4e15fa56
commit
72eb4943cb
1853 changed files with 35514 additions and 9441 deletions
23
Task/Knuth-shuffle/Standard-ML/knuth-shuffle.ml
Normal file
23
Task/Knuth-shuffle/Standard-ML/knuth-shuffle.ml
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
val rng = ref (SplitMix64.init NONE)
|
||||
|
||||
fun getRandInt max =
|
||||
let
|
||||
val (rng', next) = SplitMix64.nextRange (0, max)
|
||||
val () = rng := rng'
|
||||
in
|
||||
Word64.toInt next
|
||||
end
|
||||
|
||||
fun knuthShuffle a =
|
||||
let
|
||||
val i = ref ((Array.length a) - 1)
|
||||
in
|
||||
while !i > 0 do
|
||||
let
|
||||
val a_i = Array.sub (a, !i)
|
||||
val j = getRandInt !i
|
||||
val a_j = Array.sub (a, j)
|
||||
in
|
||||
(Array.update (a, !i, a_j); Array.update (a, j, a_i); i := (!i - 1))
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue