- •Вопрос 1) Основные структуры данных.
- •Вопрос 2) Массивы и их свойства.
- •Вопрос 3) Записи
- •Вопрос 4) Множества
- •Операции над множествами
- •Операции отношения.
- •Вопрос 5) Динамические структуры данных;
- •Вопрос 6) Линейные списки.
- •Вопрос 7) Циклические списки
- •Вопрос 8) Стек и его организация
- •Вопрос 9) Очереди и их организация
- •Вопрос 10) Задачи поиска в структурах данных.
- •Вопрос 11) Алгоритм линейного поиска.
- •Вопрос 12) Алгоритм бинарного поиска.
- •Вопрос 13) Алгоритм Кнута, Мориса- Пратта
- •Вопрос 14) Хэширование данных
- •Вопрос 15) сортировка данных
- •15. Сортировка данных
- •1) Сортировка включением
- •2) Сортировка Шелла
- •3) Обменная сортировка
- •4) Сортировка перемешиванием (Шейкерная сортировка)
- •5) Сортировка со слиянием
- •1) Прямое слияние
- •2) Естественное слияние
- •Вопрос 16) Пузырьковая сортировка.
- •17 Вопрос
- •Вопрос 18) Представление графов и деревьев
- •Вопрос 19) Представление бинарных деревьев.
- •Вопрос 20) Представление графов Способы представления графа в информатике Матрица смежности
- •Матрица инцидентности
- •Список рёбер
- •Вопрос 21) Алгоритмы на графах
- •Алгоритм Дейкстры нахождения кратчайшего пути
1) Сортировка включением
Одним из наиболее простых и естественных методов внутренней сортировки является сортировка с простыми включениями. Идея алгоритма очень проста. Пусть имеется массив ключей a[1], a[2], ..., a[n]. Для каждого элемента массива, начиная со второго, производится сравнение с элементами с меньшим индексом (элемент a[i] последовательно сравнивается с элементами a[i-1], a[i-2] ...) и до тех пор, пока для очередного элемента a[j] выполняется соотношение a[j] > a[i], a[i] и a[j] меняются местами. Если удается встретить такой элемент a[j], что a[j] <= a[i], или если достигнута нижняя граница массива, производится переход к обработке элемента a[i+1] (пока не будет достигнута верхняя граница массива).
Легко видеть, что в лучшем случае (когда массив уже упорядочен) для выполнения алгоритма с массивом из n элементов потребуется (n-1) сравнение и 0 пересылок. В худшем случае (когда массив упорядочен в обратном порядке) потребуется n*(n-1)/2 сравнений и столько же пересылок. Таким образом, можно оценивать сложность метода простых включений как O(n^2).
t:integer;
begin
for j:=2 to N do
begin
i := j;
while M[i] < M[i-1] do
begin
t:=M[i];
M[i]:=M[i-1];
M[i-1]:=t;
i := i-1
end
end
end;
2) Сортировка Шелла
Дальнейшим развитием метода сортировки с включениями является сортировка методом Шелла, называемая по-другому сортировкой включениями с уменьшающимся расстоянием.
Идея алгоритма. Сначала в исходной последовательности сортируются между собой элементы, отстоящие друг от друга на расстоянии n/2 элементов, затем на расстоянии n/4 и т.д. до тех пор пока не получим 2 последовательности, элементы которых отстоят друг от друга на расстоянии 1-го элемента. После этого делаем сортировку этой полученной последовательности выбранным методом и на выходе имеем уже полностью отсортированную последовательность.
В качестве самой сортировки элементов в группе можно использовать различные алгоритмы простой сортировки: вставками, выбором, пузырьком и проч.
Пример. Имеется последовательность [2, 3, 9, 2, 8, 4, 6, 8, 11, 12, 4, 6], n=12. Символом d - будем обозначать расстояние между сортируемыми элементами на каждом шаге (на первом шаге d = n/2, на втором d = d/2 и т.д.)
1 шаг. d = n/2 = 6. => Получаем 6 сортируемых групп(имеют одинаковый цвет): [2, 3, 9, 2, 8, 4, 6, 8, 11, 12, 4, 6] После сортировки в пределах каждой группы, имеем: [2, 3, 9, 2, 4, 4, 6, 8, 11, 12, 8, 6]
2 шаг. d = d/2 = 3. => Получаем 3 сортируемых группы(имеют одинаковый цвет): [2, 3, 9, 2, 4, 4, 6, 8, 11, 12, 8, 6] После сортировки в пределах каждой группы, имеем: [2, 3, 4, 2, 4, 6, 6, 8, 9, 12, 8, 11]
3 шаг. d = d/2 = 1(целочисленное деление) => заключительный шаг. Сортируем всю последовательность: [2, 3, 4, 2, 4, 6, 6, 8, 9, 12, 8, 11] в итоге получим:[2, 2, 3, 4, 4, 6, 6, 8, 8, 9, 11, 12]
При этом производительность алгоритма пропорциональна - О(n^2), но количество перестановок по сравнению с простыми методами вставкой, выбором или пузырьком - заметно сокращается. Дополнительная память - не используется (не считая счетчиков циклов и проч.). (Сложность алгоритма: O(n log n))