Тема 3. Поиск и сортировка массивов записей

3.1. Применимость сортировки и поиска

Вся человеческая деятельность связана с поиском и упорядочиванием.

Утром встаешь, ищешь тапочки, нужно позвонить – ищешь номер телефона, идешь в библиотеку – ищешь нужную книгу и т.д.

С другой стороны: свои вещи в квартире вы раскладываете по полочкам и стремитесь этот порядок поддерживать, список студентов в группе преподаватель, как правило, запишет в алфавитном порядке, номера домов тоже упорядочены.

Почему так устроена человеческая натура? Оказывается потому, что поиск в упорядоченном массиве значительно эффективнее! Ведь в природе зачастую успешность деятельности зависит от быстроты выбора правильного решения. Поэтому, если у вас в голове все знания упорядочены, вы достигаете больших успехов.

Возникает ряд вопросов: по каким алгоритмам осуществляются поиск и сортировка, насколько эффективнее поиск в упорядоченном массиве?

Третий том книги Дональда Кнута «Искусство программирования» в целом считается последним словом в области методик поиска и сортировки.

Используя структурированный тип Record, создаются массивы записей всевозможных баз данных (информация о студентах Вуза, информация о товарах в магазине, информация о машинном парке и др.).

Обычно база данных накапливается и хранится на диске. К ней часто приходится обращаться, обновлять, перегруппировывать. Работа с базой может быть организована двумя способами:

1) Вносить изменения и осуществлять поиск можно прямо на диске используя специфическую технику работы с записями на файлах, при этом временные затраты на обработку данных (поиск, сортировку) значительно возрастают, но нет ограничений на оперативную память;

2) В начале работы вся база (или ее необходимая часть) считывается в массивы записей и вся обработка производится в оперативной памяти, что значительно сокращает время обработки, однако требует затрат оперативной памяти.

Наиболее частыми операциями при работе с базами данных являются «поиск» и «сортировка». При этом алгоритмы решения этих задач существенно зависят от того, организованы записи в массивы или размещены на диске.

Обычно запись содержит некое ключевое слово (ключ), по которому ее находят среди множества других аналогичных записей. В зависимости от решаемой задачи ключом может, например, служить фамилия или учетный номер или адрес. Основное требование к ключу в задачах поиска и сортировки состоит в том, чтобы операция проверки на равенство была корректной. Поэтому, например, в качестве ключа не следует выбирать действительное число, т.к. из-за всегда возможной ошибки округления, поиск нужного ключа может оказаться безрезультатным, хотя этот ключ в массиве имеется. Для применения более эффективных методов поиска значения ключей должны допускать упорядоченность (т.е. проверку на > или <). Желательно, чтобы в массиве записей не было повторяющихся ключей.

Предположим далее для определенности, что тип массива записей введен следующим образом:

const Mr=10000;

type

Tinf=<описать свой тип информации>;

Tk= <описать свой тип ключа>;

Tzp=record

zp:Tinf;//поле информации

k:Tk;//поле ключа

end;

Mas=array[1..Mr] of Tzp;//Массив записей