
Род C. “Delphi Готовые алгоритмы”
.pdf







Сортировка
Таблица 9.4. Преимущества и недостатки алгоритмов сортировки (окончание)
Алгоритм |
Преимущества |
Недостатки |
Быстрая сортировка |
Быстро сортирует |
Работает некорректно |
|
большие списки |
при большом количестве |
|
|
одинаковых значений |
Сортировка слиянием |
Быстро сортирует |
Требует пространства |
|
большие списки |
под временные значения |
|
|
Работает медленнее, |
|
|
чем быстрая сортировка |
Пирамидальная сортировка |
Быстро сортирует |
Работает медленнее, |
|
большие списки |
чем сортировка слиянием |
|
Не требует пространства |
|
|
для временных значений |
|
Сортировка подсчетом |
Очень быстро работает, |
Работает медленно, |
|
если разброс |
если диапазон |
|
входных значений невелик |
значений > log(N) |
|
|
Требует дополнительной памяти |
|
|
Работает только |
|
|
с данными целого типа |
Блочная сортировка |
Очень быстро работает, |
Медленнее, |
|
если данные |
чем сортировка подсчетом |
|
распределены равномерно |
|
|
Работает с данными, |
|
|
диапазон значений которых |
|
|
велик |
|
|
Работает с данными |
|
|
любого типа |
|

Глава 10. Поиск
После того как список элементов отсортирован, может понадобиться найти в нем один из элементов. В этой главе рассматривается несколько алгоритмов для поиска (search) элементов в сортированных списках. Она начинается с краткого описания поиска методом полного перебора. Хотя данный алгоритм работает не так быстро, как другие алгоритмы, он очень прост, что облегчает его написание и отладку. Данный алгоритм очень удобен для обработки совсем небольших списков.
Далее в главе описан двоичный поиск. Для того чтобы найти элемент, двоичный поиск несколько раз разбивает список на части, при этом в больших списках такой поиск выполняется намного быстрее, чем полный перебор. Идея, которая лежит в основе метода, достаточно проста, но реализовать ее гораздо сложнее.
Затем в главе описывается интерполяционный поиск. Как и двоичный поиск, интерполяционный поиск многократно разбивает список на части. При использовании такого поиска алгоритм делает предположения о том, где должен находится искомый элемент, поэтому для списков, в которых элементы распределены равномерно, он выполняется намного быстрее, чем двоичный поиск.
В конце главы рассматриваются методы следящего поиска. Применение этого метода иногда уменьшает время поиска в несколько раз.
Пример программы
Программа Search демонстрирует все алгоритмы, описанные в этой главе. Введите число элементов, которое должен содержать список, и нажмите кнопку Create List (Создать список). Программа создаст список на основе массива, где каждый элемент больше предыдущего на значение от 0 до 5, при этом отображается значение наибольшего элемента списка, чтобы вы представляли диапазон значений элементов.
После создания списка выберите алгоритмы, которые хотите использовать, отметив соответствующие опции. Введите искомое значение и нажмите кнопку Search (Поиск), чтобы программа выполнила поиск элемента при помощи выбранного вами алгоритма. Поскольку не все элементы присутствуют в списке, вам, возможно, придется ввести несколько различных значений, прежде чем найдется одно из них.
Программа также позволяет задавать число повторений для каждого алгоритма. Некоторые алгоритмы выполняются очень быстро, поэтому для того, чтобы сравнить их скорость, необходимо задать для них большое число повторений.
На рис. 10.1 изображено окно программы Search после нахождения элемента со значением 250 000. Элемент находился в позиции 83 498 в списке из 100 000
