5 сентября 2010 г.

Черная магия сортировки

Вступительное слово: поскольку сам я занимаюсь прогаммизмом не часто, регистрироваться на спец. форумах, дабы постить подобную хрень в отведенных для того местах, мне лениво. Но, тем не менее, иногда случаются разные находки, которыми не грех было бы и поделиться, во-первых, и которые стоит зафиксировать, чтобы самому не забыть, во-вторых. Перед теми, кому данный пост, а также любой другой помеченный тегами “прокомпьютерное” или “perl”, покажется неведомой херней, заранее извиняюсь.
Итак, как известно, сортировка это упорядочивание списка по какому-либо критерию. В perl’е этим благородным делом занимается встроенная функция с говорящим названием “sort” — штука архимощная тем, что позволяет повесить сравнение элементов упорядочиваемого массива на функцию заданную программистом. При желании, вы можете сами реализовать любой критерий сортировки. Т.е. “sort” перебирает элементы по парам и каждый раз спрашивает назначенную функцию в верном ли порядке они стоят, функция получает элементы для сравнения и возвращает три возможных результата: -1 (порядок неверный), 1 (порядок верный) и 0 (элементы равны друг-другу). Все это базовые истины, изложенные в любом учебнике или руководстве по perl’у.
А теперь представьте, что мы не будем никак сравнивать два элемента, а просто возьмем и внезапно возвратим случайную целую величину в диапазоне от -1 до 1 включительно. В результате этого черного колдунства несчастный “sort” вместо упорядочивания займется действом прямо противоположным. Например, простое тасование массива:
@unsorted = sort {int (rand(3)) - 1} @sorted

Комментариев нет:

Отправить комментарий