- •1.Основные понятия эис
- •19. Классификация алгоритмов
- •Классификация Алгоритмов
- •20. Абстрактные типы данных (массивы, связанные списки, выделение памяти)
- •Абстрактные типы данных
- •Элементарные Структуры Данных
- •Массивы
- •Связанные списки
- •Выделение Памяти
- •21. Стеки, очереди, деревья
- •Очереди
- •Деревья
- •Терминология
- •22. Математические характеристики деревьев
- •Свойства
- •23. Обход деревьев
- •Обход Деревьев
- •Алгоритм быстрой сортировки
- •1 2 3 4 5 6 7
- •25. Критерии эффективности алгоритмов (формирование, поиск последовательного масиива)
- •26. Критерии эффективности алгоритма ступенчетого поиска
- •27. Сортировка методом Шелла Сортировка Шелла
- •28. Сортировка простым включением
- •29. Приоритетные очереди
- •30. Радикс сортировка Радикс Сортировка
- •Сортировка Радикс Обменом
- •Прямая Радикс Сортировка
- •Свойства Радикс Сортировок
- •31. Рекурсия Рекурсивные определения
- •Рекурсивные процедуры
- •Итерация и рекурсия
- •32. Рекурсивный обход деревьев, удаление рекурсии Рекурсивный Обход Дерева
- •Удаление Рекурсии
- •33. Элементарные методы сортировки и их характеристики Элементарные Методы Сортировки
- •Правила Игры
- •Сортировка Выбором
- •Сортировка Вставкой
- •34. Простейшие алгоритмы сортировки (методом пузырька, сортировка выбором, шейкер сортировка, ростировка Шелла), сравнение простых методов сортировки. Пузырьковая Сортировка
- •Характеристики Простейших Сортировок
- •Сортировка Файлов с Большими Записями
- •Сортировка Шелла
- •Подсчет Распределения
- •35. Алгоритмы быстрой сортировки, разрядная сортировка Алгоритм быстрой сортировки
- •1 2 3 4 5 6 7
- •36. Пирамидальная сортировка Пирамидальная сортировка
- •37. Сортировка слиянием (простое слияние, двухпутевое слияние, рекурсивный алгоритм слияния) Сортировка слиянием
- •Простое слияние
- •Y 1 2 3 4 5 6 7 8
- •Естественное двухпутевое слияние
- •Рекурсивный алгоритм слияния
34. Простейшие алгоритмы сортировки (методом пузырька, сортировка выбором, шейкер сортировка, ростировка Шелла), сравнение простых методов сортировки. Пузырьковая Сортировка
Элементарный метод сортировки, который часто дают на вводных занятиях – это пузырьковая сортировка: Стоящие рядом элементы массива обмениваются местами, до тех пор, пока встречаются неотсортированные пары. Реализация этого метода дана ниже.
procedure
bubble;
var i,j, t : byte;
begin
for
i := 100 downto 1 do
for
j:=2 to i do
if
x[j-1]>x[j] then
begin
t:=x[j-1];x[j-1]:=x[j];x[j]:=t; end;
end;
Характеристики Простейших Сортировок
Свойство 1Сортировка выбором использует около сравнений и N обменов.
Свойство 2 Сортировка вставкой использует около сравнений иобменов в среднем, и в два раза больше в наихудшем случае.
Свойство 3Пузырьковая сортировка использует около сравнений иобменов в среднем и наихудшем случаях.
Свойство 4Сортировка вставкой линейна для «почти сортированных» файлов.
Свойство 5Сортировка выбором линейна для файлов с большими записями и маленькими ключами.
Сортировка Файлов с Большими Записями
Очень часто бывает возможно (и желательно) сделать так, чтобы при сортировке файла состоящего из N элементов любом методом было бы сделано только N операций обмена полной записи посредством косвенной адресации к элементам массива (используя массив индексов или указателей), а саму реорганизацию делать после.
Более конкретно: если массив a[1..N] содержит большие записи, то мы предпочтем использовать массив указателей p[1..N] для того, чтобы знать, где находится очередной элемент массива a, и для произведения псевдообмена. Ниже приведена программа сортировки вставкой с использованием массива указателей:
procedure
insertion;
var i, j, v : integer;
p :
array[1..N] of integer;
begin
for
i:=1 to N do p[i] := i;
for
i := 2 to length(a) do begin
v := p[i]; j:=i;
while a[p[j-1]] > a[v] do
begin
p[j] := p[j-1]; j:=j-1;
end;
p[j] := v;
end;
end;
procedure
rearrange;
var i,j,k,t : integer;
begin
for
i:=1 to length(a) do
if
p[i]<>i then begin
t:=a[i];
k:=i;
repeat
j := k; a[j]:=a[p[j]];
k:=p[j]; p[j]:=j;
until
k=i;
a[j]:=t;
end;
end;
Изначально, индексы идут по порядку. Потом порядок индексов начинает меняться так, чтобы массив a, прочитанный по порядку чтения индексов был упорядочен. Но что, если данные должны быть на самом деле переупорядочены, как это показано на рисунке 6?
Для этого мы можем использовать следующую процедуру, которая физически упорядочивает записи файла используя при этом N перестановок:
рисунок 6 Переупорядочение
«сортированного» массива