
- •1 Рекурсия
- •2 Рекурсия и Итерация
- •3 Линейный поиск
- •4 Поиск делением пополам (двоичный поиск)
- •5 Сортировка
- •6 Сортировка простыми включениями.
- •7 Сортировка бинарными включениями
- •8 Сортировка простым выбором.
- •9 Сортировка простым обменом (метод пузырька)
- •10 Шейкер сортировка.
- •11 Сортировка включениями с убывающими приращениями (сортировка Шелла).
- •12 Сортировка с разделением (быстрая сортировка).
- •13 Ссылочные типы.
- •14 Динамические структуры данных
- •15 Создание и уничтожение динамических переменных
- •16. Связанные списки
- •17. Связанные списки. Создание очередного элемента. Просмотр списка
- •18. Добавление компонент в середину списка
- •19. Исключение компонент из середины списка
- •20. Рекурсивная обработка списка
- •Вопрос 21
- •22 Деревья.
- •23 Двоичные деревья.
- •24 Двоичное дерево поиска.
- •25 Добавление узла к двоичному дереву.
- •26 Поиск в двоичном дереве.
- •28 Удаление из дерева.
- •29 Деревья общего вида.
- •30 Становление ооп
- •Абстрагирование
- •Иерархия
- •31 Основные концепции
- •2 Наследование
- •3 Индивидуальность объекта.(Про это у меня вообще ничего нет)
- •32 Абстрактные типы данных
- •37 Виртуальные методы.
- •38 Позднее связывание.
- •39 Полиморфизм
- •40 Расширенная совместимость типов.
- •42 Динамические объекты
- •45 Необходимость виртуальных методов.
5 Сортировка
Под сортировкой обычно понимают процесс перестановки объектов данного множества в определенном порядке. Метод сортировки называется устойчивым, если относительный порядок эл-тов с одинаковыми ключами не меняются при перестановке. Устойчивость сортировки желательна когда элементы отсортированы по каким-либо вторичным ключам, т. е. по свойствам не отраженным первичным ключом.
Сортировка массивов.
Основные требования к методам сортировки массива – экономичное использование памяти, т. е. упорядочивание эл-тов необходимо выполнить на том же самом месте и методы которые пересылают эл-ты из массива А в массив В нас не интересуют.
Меры эффективности алгоритмов. 1) Число необходимых сравнений ключей. 2) Пересылки эл-тов Эти числа определяются некоторыми числами от числа N. Хороший алгоритм требует порядка n log n числа сравнений.
6 Сортировка простыми включениями.
Элементы разделяются на две части – готовую последовательность а1,…,аi-1 и входную последовательность аi,…,an. На каждом шаге начиная с I:=2; и увеличивая I:=I+1 берут I-тый эл-т входной последовательности и передают в готовую посл-ть вставляя его на подходящее место.
Алгоритм.
For I:=2 to n do begin X:=a[I]; «вставить х на подходящее место в а1,…,аi» end;
При поиске подходящего места удобно передавать сравнение и пересылки, т. е. как бы просеивать х сравнивая его с очередным эл-том аj и либо вставляя х, либо пересылая аj направо и продвигаясь на лево. Такое просеивание может закончится при условиях 1) либо найден эл-т аj с ключом< чем ключ х
2) либо достигнут левый конец посл-ти.
Это типичный пример цикла с двумя условиями окончания поэтому можно применить известный метод барьера. Для этого установим барьер а0:=x
const n=20; type item= integer; index=0..n; var a:array [1..n] of item; I,j:index; x:item; begin for I:=2 to n do begin x:=a[I];
a[0]:=x; {ставим барьер} j:=I-1; while x<a[j] do begin a[j+1]:=a[j]; j:=j-1; end; a[j+1]:=x; end; end;
Число сравнений ключей Сi при I-том просеивании составляет самое большое I-1, самое меньшее 1. Если предположить, что все сравнения равны вероятно i/2.
Наименьшие числа появляются если эл-ты с самого начала упорядочены, а наихудший встречается если эл-ты расположены в обратном порядке.
7 Сортировка бинарными включениями
Алгоритм сортировки с простыми включениями можно улучшить пользуясь тем что готовая последовательность а1,…,аi-1 в которую нужно включать новый эл-т уже упорядочена. Очевидно, что здесь можно применить алгоритм бинарного поиска.
const n=20; type item= integer; index=0..n; var a:array [1..n] of item; I,j:index; x:item; begin for i:=2 to n do begin x:=a[i]; l:=1;
r:=i-1; while l<=r do begin m:=(l+r) div 2; if x<a[m] then r:=m-1 else l:=m+1; end; for j:=i-1 downto l do begin a[j+1]:=a[j]; a[l]:=x;
end; end; end;
Анализ сортировки бинарного включения
Кол-во сравнений не зависит от исходного порядка эл-тов, но из-за округления при делении пополам действительная число сравнений для I-го эл-та может быть на 1 больше ожидаемого. В результате места включ. в нижней части находятся быстрее чем в верхней. Это дает преимущество в случаях когда эл-ты изначально далеки от правильного порядка. Мин. число сравнений если в начале расположены в обратном порядке и макс. – если они упорядочены => этот случай ниестественного поведения алгоритма сортировки.
Улучшение которое мы получаем применяя бинарный поиск касается только числа сравнений. Число пересылок это более важный показатель, т. к. пересылки требуют большего времени, здесь m остается порядка m2, поэтому улучшение не является решающим, а если массив уже почти рассортирован алгоритм занимает больше времени чем СПВ с посл. включением.