Сортировка и поиск являются двумя фундаментальными концепциями вычислительной науки. Они используются практически в любом приложении, работающем с базой данных, компилятором или даже Internet. Чем больше информации можно получить из Internet, тем важнее становится точное знание о том, где она размещена.
Общеизвестно, что сортировка не является настолько серьезной задачей в контексте PHP, насколько она является таковой для языка программирования C++. PHP имеет несколько очень мощных функций сортировки, одна из которых позволяет определить, каким образом можно сравнить два элемента. В этой главе рассматриваются некоторые классические проблемы вычислительной науки. Изучение этих концепций может представляться интересным при использовании таких обобщенных языков программирования, яркими представителями которых являются языки C и Ada. Но понимание этих концепций позволит понять внутренние механизмы работы баз данных, Web-серверов и даже PHP. Таким образом, вы будете во всеоружии при решении неизбежных проблем, решение которых с помощью встроенных функций PHP не представляется возможным.
Кроме того, в этой главе обсуждаются случайные числа, которые могут помочь в упорядочивании данных. Практическая их реализация применения обычно принимает вид уникальных идентификаторов, характеризующих файлы или сеансы.
21.1. Сортировка
Сортировка предполагает размещение набора значений в определенном порядке. Правила сортировки могут быть достаточно простыми, например сортировка строк по алфавиту. А могут быть и достаточно сложными - сначала отсортировать по названиям стран, затем по названиям штатов и по названиям городов. Процесс сортировки может принимать несколько форм, но всегда включает сравнение двух элементов с применением набора правил упорядочивания. По результату сравнения можно определить расположение двух значений по порядку и по необходимости поменять их местами. 
Существуют три класса сортировок: обмен, вставка и выборка. При применении метода обмена два элемента сравниваются и по мере необходимости меняются местами. Этот процесс продолжается до тех пор, пока не будет достигнут конец списка. Метод вставки предусматривает удаление элементов из одного списка и вставки их в другой. При переносе каждый элемент вставляется в нужное место. После того как будут перенесены все элементы исходного списка, элементы нового списка уже будут располагаться в правильном порядке. Сортировка с выборкой предусматривает просмотр исходного списка на предмет меньшего значения и вставки его в результирующий список. Сортировки вставкой и выборкой являются двумя сторонами одной медали. Если при первом методе сканируется новый список, то во втором - старый.
Как было замечено ранее, алгоритм сортировки заключается в основном в сравнении и возможном перемещении элементов списка. В среднем для всех алгоритмов время, необходимое для перемещения элемента, примерно одно и то же. Справедливо и то, что сравнение не зависит от реальной сортировки. Приняв это за константу, самым важным вопросом становится следующий: сколько раз алгоритм будет выполнять каждое из этих действий?
Конечно, сортировка должна происходить в соответствии с контекстом данных. Одни алгоритмы работают очень хорошо с неупорядоченными данными, но при этом работают очень медленно с упорядоченными. Другие алгоритмы плохо проявляют себя с большим количеством элементов, тогда как третьи потребляют слишком много ресурсов и поэтому неприемлемы при обработке малых объемов данных. Как и любой другой специалист, программист должен сам подбирать рабочий инструмент, соответствующий поставленной задаче.