Случайное число. Перемешать массив

Задача.
Функция получает массив чисел и возвращает массив, перемешанный в случайном порядке, то есть, меняет расположение элементов в случайном порядке.

Решение.
Данную задачу я решил бы следующим образом. Пусть N – число элементов в массиве. Тогда мы в цикле делаем N-1 итерацию. В каждой итерации получаем случайный индекс массива, исключая первый или последний элемент массива (для определенности пусть будет последний). Т.е. в диапазон случайных индексов может попасть индекс любого элемента, кроме последнего. И меняем местами следующие элементы: со случайным индексом и последний. Например, пусть исходный массив состоит из элементов [0,1,2,3,4,5,6,7,8,9]. Т.е. изначально индекс элемента совпадает с его значением. Случайный индекс мы будем получать в диапазоне 0-8. В первой итерации, например, выпадает индекс 3 – значение 3. Мы меняем местам элемент 3 с элементом 9. Получаем [0,1,2,9,4,5,6,7,8,3]. В следующей итерации, например, выпадает 7. Меняем 7 с последним элементом 3. Получаем [0,1,2,9,4,5,6,3,8,7]. И таким образом N-1, т.е. 9 итераций.
Ну, и отдельной подзадачей, нужно написать функцию, которая будет возвращать случайное целое число из указанного диапазона. Эта функция, наверняка, пригодится в будущем.

Код javascript:
var arr = [0,1,2,3,4,5,6,7,8,9];

/* получить случайное целое число из диапазона */
function random(min, max) {
    var range = max - min + 1;
    return Math.floor(Math.random()*range) + min;
}

/* перемешать массив */
function shuffle(arr) {
    var r_i; // случайный индекс
	var v; // временная переменная
	for (var i = 0; i < arr.length-1; i++) {
		/* получаем случайный индекс (кроме последнего) */
		r_i = random(0, arr.length-1);
		/* меняем местами случайный элемент массива с последним */
		v = arr[r_i];
		arr[r_i] = arr[arr.length-1];
		arr[arr.length-1] = v;
	}
	return arr;
}
Теги:
Случайное число, Перемешать массив
Добавлено: 01 Апреля 2018 21:04:01 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...