Ассемблер и программирование для IBM PC


          

ГЛАВА 14. Обработка таблиц - часть 8


ПРОГРАММА: СОРТИРОВКА ЭЛЕМЕНТОВ ТАБЛИЦЫ ------------------------------------------------------------

Часто возникает необходимость сортировки элементов таблицы в восходящем или нисходящем порядке. Например, пользователю может потребоваться список наименований товара в алфавитном порядке или список общих цен в нисходящей последовательности. Обычно, табличные данные не определяются как в предыдущей программе, а загружаются с клавиатуры или с диска. Данный раздел посвящен сортировке элементов таблицы, что касается различных применений, включающих сортировку записей на дисках, то здесь возможны более сложные программы. Существует несколько алгоритмов сортировки таблиц от неэффективных, но понятных, до эффективных и непонятных. Программа сортировки, предлагаемая в данном разделе, весьма эффективна и может применяться для большенства табличных сортировок. Конечно, если не проверить различные алгоритмы сортировок, то даже самая неэффективная программа может показаться работающей со скоростью света. Но цель данной книги - показать технику ассемблера, а не сортировки. Основной подход заключается в сравнении соседних элементов таблицы. Если первый элемент больше второго, то элементы меняются местами. Таким образом выполняется сравнение элементов 1 со 2, 2 с 3 и т.д. до конца таблицы с

Ассемблер для IBM PC. Глава 14 32

перестановкой элементов там, где это необходимо. Если в проходе были сделаны перестановки, то весь процесс повторяет ся с начала таблицы т.е. сравниваются снова элементы 1-2, 2-3 и т.д. Если в проходе не было перестановок, то таблица отсортирована и можно прекратить процесс. Ниже приведен алгоритм, в котором переменная SWAP является индикатором: была перестановка элементов (YES) или нет (NO):

G10: Определить адрес последнего элемента G20: Установить SWAP=NO Определить адрес первого элемента G30: Элемент > следующего элемента? Да: Представить элементы Установить SWAP=YES Перейти к следующему элементу Конец таблицы? Нет: Перейти на G30 Да: SWAP=YES? Да: Перейти на G20 (повторить сорт.) Нет: Конец сортировки




Содержание  Назад  Вперед