
- •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 Необходимость виртуальных методов.
8 Сортировка простым выбором.
Этот метод основан на правиле: 1) выбирается эл-т с наименьшим ключом 2) он меняется местами с 1-м эл-ом а1 - эти операции затем повторяются с оставшимися с n-1 эл-ми, затем с n-2, пока не останется один – наибольший эл-т.
For I:=1 to n-1 do
Begin
Присвоить k индекс наименьшего эл-та из аi…аn .
Поменять местами аi и ak.
End;
Этот метод называется сортировка простым выбором в некотором смысле противоположен методу сортировки простым включением. Там рассма. только 1 эл-т входной последовательности и все эл-ты готового массива для нахождения места включения, а при Спвыбором рассматривает все эл-ты входного массива для нахождения эл-та с наименьшим ключом и этот 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:=1 to n-1 do begin k:=I; x:=a[I];
for j:=I+1 to n do if a[j]<x then begin k:=j;x:=a[j]; end a[k]:=a[I]; a[I]:=x; end; end;
Вывод: обычно Спвыбором предпочтительней СПвкл., хотя в случаи когда ключи заранее рассортированы или почти рассортированы СПвкл. Работает несколько быстрее.
9 Сортировка простым обменом (метод пузырька)
В этой сортировки обмен 2-х эл-тов является основной характеристикой процесса. Алгоритм основан на сравнии двух соседних эле-тов.
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 for j:=n downto i do
if a[j-1]>a[j] then begin x:=a[j-1]; a[j-1]:=a[j]; a[j]:=x; end; end;
Число сравнений и пересылок равняется N2.
Сортировку простым обменом (метод пузырька) можно улучшить, т. к. при СПО последние проходы не влияют на порядок Эл-тов. т. е. можно запомнить производится ли на данном этапе обмен и если нет то это означает, что алгоритм может закончить работу. Процесс улучшения можно продолжить если запоминать не только сам факт обмена, но и место (индекс) последнего обмена, т. к. ясно, что все пары соседних эл-тов с индексами < этого индекса уже рассортированы в нужном порядке. Поэтому следующие проходы можно заканчивать на этом индексе вместо того, чтобы двигаться до установленной заранее нижней границы.
10 Шейкер сортировка.
Если менять направление следующих друг за другом проходов в сортировки простым обменом (метод пузырька), то получается алгоритм Шейкер сортировки.
const n=20; var a:array [1..n] of integer; i,j,l,k,x,r:integer; begin l:=2; r:=n; k:=n; repeat for j:=r downto l do if a[j-1]>a[j] then begin
x:=a[j-1]; a[j-1]:=a[j]; a[j]:=x; k:=j; end; l:=k+1; for j:=l to r do if a[j-1]>a[j] then begin x:=a[j-1]; a[j-1]:=a[j]; a[j]:=x; k:=j; end;
r:=k-1 until l>r; end;
Число сравнений и пересылок равняется N2.
Алгоритм Шейкер сортировки можно использовать в тех случаях, когда Эл-ты почти упорядочены.
11 Сортировка включениями с убывающими приращениями (сортировка Шелла).
На 1-м проходе группируются и сортируются все эл-ты стоящие друг от друга на 4 позиции. Этот процесс называется четыре сортировкой. После этого эл-ты вновь определяются в группы с эл-ми стоящими друг от друга на две позиции и сортируются заново – это двухсортировка. Наконец все эл-ты сортируются обычной сортировкой (одинсортировкой).
Может показаться, что необходимость нескольких проходов сортировки в которых участвуют все эл-ты потребуют больше места, чем сэкономит. Однако на каждый шаг сортировки либо участвуют сравнительно мало эл-тов, либо они уже довольно хорошо упорядочены и требуют относительно малых перестановок. Применима любая последовательность приращений, либо последняя равна 1, т. к в худшем случае вся работа будет выполнятся на последнем проходе. Программа разрабатывается вне связи с конкретной последовательностью приращений. Все t приращения обозначаются h1,h2,…,ht
ht:=1, hi+1<hi
Каждая h сортировка программируется как сортировка простыми включениями. При этом
чтобы условия окончания поиска метода включения было простым, используется вместо барьера …. Очевидно, что каждая h сортировка требует собственного барьера и программа должна определять его как можно проще, поэтому массив нужно дополнять не одной компонентой а0, а h1 компонентами. Теперь массив описывается таким образом
а:array [-h1..n] of item
const t=4; var I,j,k,s:index; x:item; m:1..t; h:array [1..t] of integer; begin h[1]:=9; h[2]:=5; h[3]:=3; h[4]:=1; for m:=1 to t do
begin k:=h[m]; s:=-k; {место барьера} for i:=k+1 to n do begin x:=a[i]; j:=i-k; if s=0 then s:=-k; s:=s+1; a[s]:=x{определили барьер} while x<a[j] do begin a[j+k]:=a[j]; j:=j-k; end; end; a[j+k]:=x; end; end;