
154
ГЛАВА 4. СОРТИРОВКА И ПОИСК
§4.1. Введение в поиск
Алгоритмы поиска занимают важное место в прикладных алгоритмах.
Обычно данные хранятся в определенном образом упорядоченном наборе. Найти
некоторую запись из этого набора — вот классическая задача программирования,
вокруг которой сгенерировано множество идей.
Пусть мы имеем таблицу, состоящую из записей (табл. 4.1.1). Первое поле
каждой записи
содержит ключ (например, табельный номер); второе — фамилию
и так далее. Ключом может любое поле записи.
Таблица 4.1.1
14 Иванов - - - - - - - - -
2 Андреев - - - - - - - - -
308 Сидоров - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - -
1026 Петров - - - - - - - -- -
Основная задача поиска — найти запись с заданным ключом.
Все алгоритмы поиска, в зависимости от того, упорядочена таблица или нет,
разбиваются по две большие группы. Упорядоченность понимается как наличие
хотя бы одного отсортированного поля — а именно, ключевого.
§4.2. Последовательный поиск
Наиболее примитивный, а значит, и наименее эффективный, способ
поиска — это обычный последовательный
просмотр записей таблицы. Метод
применяется к таблице, организованной как массив. Предложим, что k — массив
из n ключей; r — массив записей такой, что k(i) — ключ для записи r(i); key —
аргумент поиска. Запишем в переменную search наименьшее целое число i, такое,
что k(i)=key, если такое i существует, и -1 в противном случае.
Алгоритм последовательного
поиска
for( search=-1, i=0; i<n; i++)
if(key==k[i])
{
search=i;
break; }