Я хочу сортировать файлы по времени модификации по возрастанию и убыванию.
В соответствии с этим ответом Похоже, что лучше всего добиться определения функции обратного вызова сортировки и использования usort / uasort.
Однако из-за характера моего приложения я, скорее всего, столкнусь с некоторыми сценариями наихудшего сценария для некоторых алгоритмов сортировки (например, почти обратной последовательности ввода).
Поскольку каждое сравнение использует два доступа к файловой системе, которые частично связаны с сетевыми дисками, количество сравнений является критическим и должно быть сведено к минимуму. Других видов итераций может быть больше.
Итак, какие алгоритмы сортировки используют функции сортировки массива PHP? Quicksort? Multisort? Есть ли способ настроить это?
Должен ли я, возможно, перетасовать массив перед сортировкой?
Или мне нужно написать свою собственную реализацию?
Знаете ли вы хорошие библиотеки, которые предоставляют функции сортировки с настраиваемыми алгоритмами?
Какой алгоритм или способы решения этой проблемы минимизации сравнений вы бы порекомендовали?
На php.net/sort
я нашел это:
Примечание. Как и большинство функций сортировки PHP, sort () использует реализацию «Quicksort».
Я считаю, что он использует рандомизированный quicksort , поэтому нет необходимости перетасовывать массив.
Я сделал несколько тестов, и быстро сортировка PHP не была рандомизирована, поэтому перетасовываем ваш массив ввода!
Я сделал несколько поисков с использованием PHP OpenGrok и просто основываясь на некоторых взглядах на имена функций и код смены кода, похоже, что usort реализован с помощью quicksort.
Чтобы минимизировать вызовы файловой системы, сделайте их один раз для каждого элемента в вашем массиве и сохраните результаты в другом массиве. Используйте этот второй массив в вашей функции компаратора вместо повторных вызовов.