- •Ответы на вопросы должны быть полными, но, по возможности, не избыточными!
- •1.Алгоритмы сортировки (не менее трех)
- •Сортировка пузырьком
- •Сортировка выбором
- •Сортировка Шелла
- •Выбор длины промежутков
- •2. Методы оптимизации структуры и выполнения программного кода
- •3. Структурированное расположение текста
- •3.1 Длина строки
- •3.2 Перенос длинных строк
- •Пустые строки
- •Пустые строки
- •4. Механизмы доступа к базам данных
- •5.Объектная модель Excel
- •Структура проекта vba
- •7. Основные понятия объектно-ориентированного программирования
- •8.Принципы объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм
- •9. Принципы экстремального программирования
Сортировка выбором
Сортировка выбором (Selection sort) — алгоритм сортировки. Может быть реализован и как устойчивый и как неустойчивый. На массиве из n элементов имеет время выполнения в худшем, среднем и лучшем случае Θ(n2), предполагая что сравнения делаются за постоянное время.
Шаги алгоритма:
находим номер минимального значения в текущем списке
производим обмен этого значения со значением первой неотсортированной позиции (обмен не нужен, если минимальный элемент уже находится на данной позиции)
теперь сортируем хвост списка, исключив из рассмотрения уже отсортированные элементы
Для реализации устойчивости алгоритма необходимо в пункте 2 минимальный элемент непосредственно вставлять в первую неотсортированную позицию, не меняя порядок остальных элементов.
Покажем, почему данная реализация является неустойчивой. Рассмотрим следующий массив из элементов, каждый из которых имеет два поля. Сортировка идет по первому полю. Массив до сортировки: { (2, a), (2, b), (1, a) } Уже после первой итерации внешнего цикла будем иметь отсортированную последовательность: { (1, a), (2, b), (2, a) } Теперь заметим, что взаимное расположение элементов (2, a) и (2, b) изменилось. Таким образом, рассматриваемая реализация является неустойчивой.
Так как после каждого прохода по внутреннему циклу делается только один обмен, то общее число обменов равно N-1, что в N/2 раз меньше, чем в сортировке пузырьком. Число проходов по внутреннему циклу равно N-1 даже в случае сортировки частично или полностью отсортированного массива. Наихудший случай: Число сравнений в теле цикла равно (N-1)*N/2. Число сравнений в заголовках циклов (N-1)*N/2. Число сравнений перед операцией обмена N-1. Суммарное число сравнений N2−1. Число обменов N-1. Наилучший случай:
Существует также двунаправленный вариант сортировки методом выбора, в котором на каждом проходе отыскиваются и устанавливаются на свои места и минимальное, и максимальное значения.
Сортировка Шелла
Сортировка Шелла (англ. Shell sort) — алгоритм сортировки, являющийся усовершенствованным вариантом сортировки вставками. Идея метода Шелла состоит в сравнении элементов, стоящих не только рядом, но и на определённом расстоянии друг от друга. Иными словами — это сортировка вставками с предварительными «грубыми» проходами. Аналогичный метод усовершенствования пузырьковой сортировки называется сортировка расчёской.
При сортировке
Шелла сначала сравниваются и сортируются
между собой значения, отстоящие один
от другого на некотором расстоянии
(о
выборе значения
см.
ниже).
После этого процедура повторяется для
некоторых меньших значений
,
а завершается сортировка Шелла
упорядочиванием элементов при
(то
есть обычной сортировкой
вставками).
Эффективность сортировки Шелла в
определённых случаях обеспечивается
тем, что элементы «быстрее» встают на
свои места (в простых методах сортировки,
например, пузырьковой,
каждая перестановка двух элементов
уменьшает количество инверсий в
списке максимум на 1, а при сортировке
Шелла это число может быть больше).
Невзирая на то, что сортировка Шелла во многих случаях медленнее, чем быстрая сортировка, она имеет ряд преимуществ:
отсутствие потребности в памяти под стек;
отсутствие деградации при неудачных наборах данных — быстрая сортировка легко деградирует до O(n²), что хуже, чем худшее гарантированное время для сортировки Шелла.
Сортировка Шелла была названа в честь её изобретателя — Да Шелла, который опубликовал этот алгоритм в 1959 году.
[
Пусть дан
список
и
выполняется его сортировка методом
Шелла, а в качестве значений
выбраны
.
На первом шаге
сортируются подсписки
,
составленные из всех элементов
,
различающихся на 5 позиций, то есть
подсписки
,
,
,
,
.
В полученном списке на втором шаге вновь сортируются подсписки из отстоящих на 3 позиции элементов.
Процесс завершается обычной сортировкой вставками получившегося списка.
