|
|||||||||
Попробуем отсортировать по возрастанию числа от 1 до 10. sort 1..10 дает нам результ ('1', '10', '2', '3', '4', '5', '6', '7', '8', '9'). Немного не то... Сортировка сработала как расстановка по алфавиту. Проблему можно решить с помощью оператора <=>.
По умолчанию функция сортировки sort выполняет расстановку по алфавиту (сортировка
в контексте символьных строк). Таким образом '10' и '100' появятся перед '2' и
'3'. Чтобы изменить способ сортировки в данном случае мы применили собственный
оператор сравнения двух переменных (блок сортировки).
Автор: Joseph N. Hall Сортировка одного массива в соответсвии с содержимым другого массива. Нам надо отсортировать два "параллельных" массива (списка). Например массив @page состоит из номеров страниц, а @note состоит из примечаний к этим страницам, т.е. $note[$i] - это примечание к странице $page[$i]. Нам хочется напечатать оба массива, отсортировав их по номерам страниц.
Автор: Joseph N. Hall Сортировка по убыванию. Надо просто поменять местами переменные $a и $b в блоке сравнения.
Автор: Joseph N. Hall Сортировка ключей хэш-массива в порядке возрастаний их значений. Имеем хэш-массив, состоящий из слов книги и количеством повторений этих слов. Нам надо напечатать этот массив в порядке убывания частоты слова.
Автор: Joseph N. Hall Сортировка имен файлов по дате/времени изменения.
Оператор -М возвращает дату/время изменения файла в виде числа с плавающей точкой.
Проблема состоит в том, что оператор -М выполняется очень медленно и на больших
списках файлов операция сортировки может занять очень много времени. Для сортировки
n файлов блок сравнения будет вызван примерно n log n раз. Для решения этой проблемы
смотрите пример сортировки Шварца.
Автор: Joseph N. Hall Сортировка величин, время сравнения которых сравнительно велико. Например, нам надо отсортировать файлы по времени последнего изменения, но оператор -М (время последнего изменения файла) работает очень медленно. Решить проблему можно с помощью сортировка Шварца (по имени Рандала Шварца Randal Schwartz).
Суть метода заключается в том, что медленные вычисления производятся только один
раз, а их результат сохраняется во временном массиве. Дальнейшая сортировка производится
над значениями временного массива.
Автор: Joseph N. Hall Сортировка строк по полям, разделенным символом. Например, хочу отсортировать строки, разделенные на поля запятой, сначала по второму полю по числам, затем по первому полю по алфавиту в порядке убывания.
На самом деле большая часть приведенного выше кода - это препроцессор, который
готовит данные для дальнейшей сортировки Шварца.
Автор: Joseph N. Hall
|
|||||||||
![]() |
![]() |