Javascript. Случайное число. Перемешать массив.
У дяди Коли в домашнем задании есть интересная задачка.
Задача.
Функция получает массив чисел и возвращает массив, перемешанный в случайном порядке, то есть, меняет расположение элементов в случайном порядке.
Решение.
Данную задачу я решил бы следующим образом. Пусть 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
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; } |
Свежие комментарии