Similar presentations:
Сортировки
1.
СОРТИРОВКИ2.
ОпределениеСортировка — это алгоритм для упорядочивания
элементов в массиве.
Цель сортировки – упорядочить информацию и
облегчить поиск требуемых данных
3.
ОпределениеПрактически каждый алгоритм сортировки можно
разбить на три части:
сравнение
двух элементов, определяющее
упорядоченность этой пары;
перестановку,
меняющую
местами
неупорядоченную пару элементов;
сортирующий алгоритм, определяющий выбор
элементов для сравнения и отслеживающий
общую упорядоченность массива данных.
4.
ОпределениеСортировка данных в оперативной памяти
называется внутренней, а сортировка данных во
внешних носителях называется внешней
5.
Устойчивая и неустойчиваясортировка
Устойчивый алгоритм сортировки
(stable sort) – если в процессе сортировки
относительный порядок элементов с
одинаковыми ключами не изменяется.
Обычно устойчивая сортировка
предпочтительнее неустойчивой.
6.
БАЗОВЫЙ АЛГОРИТМ СОРТИРОВКИСчитаем, что нам известен алгоритм
поиска минимального элемента в
массиве.
7.
БАЗОВЫЙ АЛГОРИТМ СОРТИРОВКИАдаптируем алгоритм поиска минимального
элемента для целей сортировки.
Фиксируем первый элемент массива. Ищем
минимальный элемент среди оставшихся
элементов справа, выполняя обмен значений с
первым элементом.
Сдвигаемся вправо: фиксируем второй элемент,
ищем минимальный среди оставшихся справа.
Повторяем до предпоследнего элемента.
8.
СОРТИРОВКА ВЫБОРОМВыполним оптимизацию базового алгоритма
для сокращения количества обменов. А именно,
при поиске минимума будем запоминать
индекс минимального элемента. После поиска
минимума один раз сделаем обмен элементов
(если индексы разные).
Полученный алгоритм называется сортировка
выбором.
9.
СОРТИРОВКА ВЫБОРОМ10.
СОРТИРОВКА ВЫБОРОМfor (i = 0; i < n; i++)
{
ind_min = i;
for (j = i + 1; j < n-1; j++)
if (mas[ind_min] > mas[j])
ind_min = j;
temp = mas[ind_min];
mas[ind_min] = mas [i];
mas[i] = temp;
}
11.
СОРТИРОВКА ПУЗЫРЬКОМПервый проход: соседние элементы сравниваются
попарно. Если порядок в паре неверный,
выполняется обмен элементов. Результат – самый
больший в конце.
Повторяем проходы до предпоследнего элемента,
до пред-предпоследнего, и так далее (за
повторение проходов отвечает внешний цикл).
При каждом проходе наименьший элемент
перемещается на одну позицию к началу массива
(«всплывает» до нужной позиции, как пузырёк в
воде).
12.
СОРТИРОВКА ПУЗЫРЬКОМ13.
СОРТИРОВКА ПУЗЫРЬКОМfor(i = 0;i < k-1; i++)
for(j = 0; j < k-i; j++)
{
if(ms[j] > ms[j+1])
{
temp = ms[j+1];
ms[j+1] = ms[j];
ms[j] = temp;
}
}
14.
СОРТИРОВКА ВСТАВКАМИНа любом промежуточном этапе сортировки
массив разделён на две части: в левой
элементы уже упорядочены по возрастанию, в
правой – ещё нет.
Текущий элемент – это самый левый элемент
из правой части. Запоминаем текущий элемент
и начинам искать для него место в левой части,
сдвигая элементы вправо. Стоп – если
следующий элемент слева меньше текущего,
или дошли до начала массива.
15.
СОРТИРОВКА ВСТАВКАМИ КАКОНЛАЙН-АЛГОРИТМ
В информатике онлайн-алгоритм – это
алгоритм, который может обрабатывать
входные данные, не имея их в полном доступе с
самого начала своей работы.
Алгоритм сортировки вставками – пример
онлайн-алгоритма. Данные для сортировки
можно дописывать в конец сортируемого
массива в процессе работы.
16.
СОРТИРОВКА ВСТАВКАМИСОРТИРОВКА ВСТАВКАМИ
17.
СОРТИРОВКА ВСТАВКАМИfor(i = 1; i < n; i++)
{
value = a[i]; значение предыдущего элемента
for (j = i - 1; j >= 0 && a[j] > value; j--)
{
a[j + 1] = a[j];
} сдвиг всех элементов направо
a[j + 1] = value; запись в освободившийся или
в тот же элемент
}
18.
СОРТИРОВКА МЕТОДОМ ШЕЛЛАСначала
сравниваются и меняются все элементы,
отстоящие друг от друга на шаг
Затем элементы, расположенные на расстоянии шаг/2
Наконец, сортируются все соседние элементы
19.
СОРТИРОВКА МЕТОДОМ ШЕЛЛАfor(gap = k/2; gap > 0; gap /= 2)
do {
flg = 0;
for(i = 0, j = gap; j < k; i++, j++)
if(ms[i] > ms[j]) // сравниваем отстоящие на
gap
элементы
{
n = ms[j];
ms[j] = ms[i];
ms[i]= n;
flg = 1; // есть еще не рассортированные
данные
}
} while (flg); // окончание этапа сортировки
20.
СОРТИРОВКА СЛИЯНИЕМРекурсивный алгоритм. Изобретен в 1945.
Если в массиве нет элементов или один
элемент, то массив считается отсортированным
и алгоритм завершается
Иначе массив разбивается на две равные(+-)
части, каждая из которых сортируется
слиянием(рекурсия!)
После пред шага к двум частям массива
применяется процедура слияния в один
отсортированный массив
21.
ПРОЦЕДУРА СЛИЯНИЯДаны два отсортированных массива A и B (как
вариант – это могут быть две части одного массива).
Их надо объединить в упорядоченный массив C.
Сравниваем элементы массивов A и B (начиная с
первого) и меньший из них записываем в массив C.
В массиве, из которого выбрали меньший элемент,
идём к следующему элементу и сравниваем теперь
его.
Когда один из массивов закончился, копируем в C
остаток другого массива.
22.
МЕТОД ДЕКОМПОЗИЦИИСортировка слиянием – это алгоритм,
использующий метод декомпозиции (а точнее –
его вариант «разделяй и властвуй», divide and
conquer). Суть метода:
1.
Разбиваем исходную задачу на подзадачи
меньшего размера
2.
Решаем подзадачи (если «разделяй и
властвуй» – то рекурсивно).
3.
Комбинируем результаты решения подзадач
в итоговый ответ.
23.
СОРТИРОВКА СЛИЯНИЕМ24.
БЫСТРАЯ СОРТИРОВКААлгоритм придуман Чарльзом Хоаром в 1960 году.
Использует стратегию «разделяй и властвуй»:
1.
Массивы длины 0 или 1 считаются
отсортированными.
2.
Массив переупорядочивается, чтобы в нём было три
части: левая – элементы меньше опорного (но они
не упорядочены), опорный элемент, правая –
элементы равные или больше опорного (тоже не
упорядочены).
3.
После шага 2 к левой и правой частям применяется
алгоритм быстрой сортировки.
25.
БЫСТРАЯ СОРТИРОВКА26.
ВНУТРЕННЯЯ И ВНЕШНЯЯСОРТИРОВКА
Внутренняя сортировка (internal sort) –
алгоритм сортировки (его реализация)
работает с данными в оперативной
памяти.
27.
ВНУТРЕННЯЯ И ВНЕШНЯЯСОРТИРОВКА
Алгоритмы внешней сортировки (external
sort) обрабатывают данные, которые
целиком в память не помещаются.
Общая идея:
1) разбить данные на части,
2) отсортировать каждую часть
алгоритмом внутренней сортировки, 3)
сцепить части в упорядоченный набор.