Получение минимального или максимального числа из массива

Пусть у нас есть массив чисел

и стоит задача найти максимальное или минимальное число из тех, которые находятся в этом массиве. Первое что приходит на ум, это перебрать массив и найти элемент с максимальным (минимальным) значением. Но есть и другой путь.

Все знают функции  Math.min() и  Math.max(), которые используются для оценки переданных аргументов и определения минимального и максимального из них. Эти функции могут принимать несколько аргументов. Вспомнив, как работает метод apply()  у Function  легко додуматься до следующего способа нахождения минимального и максимального числа из массива:

Это неплохой способ сократить код, такая запись намного короче перебора в цикле. Но остаётся ещё один вопрос — производительность.

Тест производительности

Сравним  Math.min() с реализацией перебором:

Массив чисел сгенерирован случайным образом и содержит 20 элементов, поиск элементов выполняется 1000000 раз. Итак, результаты:

Как видно, минимум оба метода выдают одинаковый, но реализация перебором при этом работает медленнее. Отмечу, что с увеличением размера массива разница увеличивается. Это логично, ведь при использовании Math.min()  перебор элементов происходит нативно, внутри FlashPlayer’а и можно было предположить что такой перебор быстрее цикла в as3.

Таким образом мы имеем более простой и более быстрый метод нахождения минимального или максимального значения в массиве чисел.

В конце полезные ссылки:

Добавить комментарий