diff --git a/De-facto unbiased shuffle/Fisher-Yates.js b/De-facto unbiased shuffle/Fisher-Yates.js new file mode 100644 index 0000000000..21e52dc9f3 --- /dev/null +++ b/De-facto unbiased shuffle/Fisher-Yates.js @@ -0,0 +1,24 @@ +function shuffle(array) { + var currentIndex = array.length, + temporaryValue, + randomIndex; + + // While there remain elements to shuffle... + while (0 !== currentIndex) { + // Pick a remaining element... + randomIndex = Math.floor(Math.random() * currentIndex); + currentIndex -= 1; + + // And swap it with the current element. + temporaryValue = array[currentIndex]; + array[currentIndex] = array[randomIndex]; + array[randomIndex] = temporaryValue; + } + + return array; +} + +// Used like so +var arr = [2, 11, 37, 42]; +shuffle(arr); +console.log(arr);