Given an integer n, write a function to return an array of size n, containing each of the numbers from 0 to n-1 in a random order. The numbers should not repeat and each number must be in array only once.
Example:
if n = 3, one possible array returned would be [2, 0, 1].
[2, 0, 0] is not a valid array since '0' is duplicated and the '1' does not appear.
The de-facto unbiased shuffle algorithm is the Fisher-Yates (aka Knuth) shuffle.
var arr_len = 10; // length of input array
function random_array( num ) {
var i, j, tmp,
raw_array = [];
for ( i = 0; i < num; i++ ) { // create array
raw_array.push(i);
}
for ( i = num - 1; i > 0; i-- ) { // swap elements in array randomly using Fisher-Yates (aka Knuth) Shuffle
j = Math.floor( Math.random() * (i + 1) );
tmp = raw_array[i];
raw_array[i] = raw_array[j];
raw_array[j] = tmp;
}
//alert( 'n = ' + num + '; array = [ ' + raw_array + ' ]' ); // alert for demonstation
document.getElementById('log').innerHTML = 'n = ' + num + '; array = [ ' + raw_array + ' ]';
// return raw_array;
}
random_array( arr_len );