Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Список литературы
Структуры данных и алгоритмы. Альфред В. Ахо, Джон Э. Хопкрофт, Джеффри Д. Ульман. – М.: Издательский дом «Вильямс», 2000
Алгоритмы: построение и анализ. Т. Кормен, Ч. Лейзерсон, Р. Ривест. – М.: МЦНМО, 2000.
Д. Кнут. Искусство программирования для ЭВМ.
Одной из первых крупных систем программного обеспечения, продемонстрировавших богатые возможности сортировки, был компилятор Larc Scientific Compiler, разработанный фирмой Computer Sciences Corporetion в 1960 г. В этом оптимизирующем компиляторе для расширенного ФОРТРАНа сортировка использовалась весьма интенсивно, так что различные алгоритмы компиляции работали с относящимися к ним частям исходной программы, расположенными в удобной последовательности. При первом просмотре осуществлялся лексический анализ, т.е. выделение с исходной программе лексических единиц (лексем), каждая из которых соответствует либо константе, либо оператору и т.д. Каждая лексема получала несколько порядковых номеров. В результате сортировки по именам и соответствующим порядковым номерам все использования данного идентификатора оказывались собранными вместе. "Определяющие вхождения", специализирующие идентификатор как имя функции, параметр или многомерную переменную, получали меньшие номера, поэтому они оказывались первыми в последовательности лексем, отвечающих этому идентификатору. Тем самым облегчалась проверка правильности использования идентификаторов, распределение памяти с учетом деклараций эквивалентности и т.д. Собранная таком образом информация о каждом идентификаторе присоединялась к соответствующей лексеме. Поэтому не было необходимости хранить в оперативной памяти "таблицу символов", содержащую сведения о идентификаторах. После такой обработки лексемы снова сортировались по другому порядковому номеру, где новый порядок лексем использовался на последующих фазах компиляции - для облегчения оптимизации циклов, включение в листинг сообщений об ошибках и т.д.
Считается, что в среднем более 25% машинного времени систематически тратиться на сортировку. Во многих вычислительных системах, например, СУБД, более половины машинного времени. Из этой статистики можно заключить, что либо
1) сортировка имеет много важных применений;
2) ею часто пользуются без нужды;
3) применяются неэффективные медленные алгоритмы сортировки.
Если рассматривать вопрос в более широком плане, алгоритмы сортировки представляют интересный пример того, как следует подходить к решению проблем программирования вообще, предоставляя широкое поле деятельности как объект исследования, ведь в этой области существует множество увлекательных нерешенных задач, наряду с весьма немногими уже решенными.
Простые схемы сортировки
Простая обменная сортировка методом «пузырька»
Листинг. Алгоритм „пузырька"
(1) for i:= 1 to n - 1 do
(2) for j:= 1 downto i + 1 do
(3) if R [ j ] .K < R [ j - 1] .K then
(4) swap (A[j], A[j-1])
Процедура swap (перестановка) используется во многих алгоритмах сортировки для перестановки записей местами, ее код показан в следующем листинге.
Листинг Процедура swap
procedure swap (var x, у: recordtype)
{swap меняет местами записи х и у }
var temp:recordtype;
Begin
temp:= x;
x:= y,
y:= temp;
end; { swap },
Приведенная блок-схема реализует более «интеллектуальный» алгоритм сортировки, в котором запоминается последняя позиция, в которой произошел обмен. Благодаря чему исключаются те просмотры последовательности в позициях превышающих позицию, занятую текущим элементом (т.к. в этих позициях «естественным образом расположились бОльшие ключи).
Дата публикования: 2015-01-10; Прочитано: 580 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!