Изучаю JavaScript, метод sort()
Все в общем-то понятно было, но далее я встретил пример из учебника с методом Math.random()
:
Задание:
Используйте функцию sort для того, чтобы «перетрясти» элементы массива в случайном порядке.
Решение(дано в учебнике, но без объяснений):
Функция сортировки должна возвращать случайный результат сравнения. Используйте для этого Math.random.
Обычно Math.random() возвращает результат от 0 до 1. Вычтем 0.5, чтобы область значений стала [-0.5 ... 0.5).
var arr = [1, 2, 3, 4, 5];
function compareRandom(a, b) {
return Math.random() - 0.5;
}
arr.sort(compareRandom);
alert( arr ); // элементы в случайном порядке, например [3,5,1,2,4]
Долго думал. Я так понимаю действие данной return Math.random() - 0.5;
строчки:
"универсальный алгоритм сортировки" берет два числа(a и b), далее запускается return Math.random() - 0.5;
если число меньше ноля, первым в записи идет a(сортировка поставит a по меньшему индексу), если больше ноля, первым идет в записи b( сортировка поставит b по меньшему индексу). Чтобы было нагляднее, я нарисовал схему(на примере(2, 4)):
1). Мой первый вопрос, правильно ли я понимаю работу данной функции. Также хочется узнать доступным языком принцип действия "универсальный алгоритм сортировки".
// ######
На данном этапе изучения JavaScript я понял, что в функции, в скобках передаются значения, и конечно они используются в самой функции, вот пример:
function compareNumeric(a, b) {
return a - b;
}
var arr = [ 1, 2, 15 ];
arr.sort(compareNumeric);
alert(arr); // 1, 2, 15
Но в первом примере, в функции, a и b не используются, а сразу идет return
, поэтому я попробовал совсем их убрать и записал так:
var arr = [1, 2, 3, 4, 5];
function compareRandom() {
return Math.random() - 0.5;
}
arr.sort(compareRandom);
alert( arr );
Удивительно, но все работает и так.
2). Мой второй вопрос, в данном случае можно в скобках совсем не указывать a и b? Почему тогда в учебнике запись (a,b)
"но все работает и так" - где ж работает? Массив ведь не отсортирован. Такая compare
функция возвращает случайный результат, в массиве после "сортировки" элементы будут идти в произвольном порядке.
var arr = [1, 2, 3, 4, 5];
var count = 0;
function compareRandom() {
count++;
return Math.random() - 0.5;
}
arr.sort(compareRandom);
console.log(count);
console.log( arr );
Обратите внимание на меняющееся значение count
. Теоретически, такая "сортировка" может никогда не закончиться, так как два сравнения одной и той же пары чисел могут дать противоположные результаты.
А, по пунктам:
var arr = [1, 2, 3, 4, 5];
var count = 0;
function compareNumeric(a, b) {
count++;
return a - b;
}
arr.sort(compareNumeric);
console.log(count);
console.log( arr );
Во время нормальной (с compareNumeric
) сортировки массива необходимо выполнить определенное количество сравнений пар элементов. В зависимости от начального расположения элементов в массиве, некоторые пары будут сравниваться несколько раз. Логика сортировки базируется на том, что повторные сравнения чисел 2 и 3 возвращают результат, показывающий, что три больше двух. Если у этих повторных сравнений результат - случайный, то как в конце концов дожны располагаться числа 2 и 3 в окончтельном отсортированном массиве?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Добрый день! У меня есть сайт, на который я хочу добавить парочку мини-игрНа сайте есть баланс, так вот, как можно реализовать игру "Монетка"...
Как можно реализовать, чтобы при выборе определенного города, выводился определенный номер ? Я понимаю что через JS, может кто с кодом помочьЗаранее...
Нужно вывести содержимое двух массивов с помощью ajaxпоявляется ошибка в js при распарсивании массива Unexpected token { in JSON at position 19