Слайд 2Определение
Сортировка — это алгоритм для упорядочивания элементов в массиве.
Цель сортировки – упорядочить информацию
![Определение Сортировка — это алгоритм для упорядочивания элементов в массиве. Цель сортировки](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176016/slide-1.jpg)
и облегчить поиск требуемых данных
Слайд 3Определение
Практически каждый алгоритм сортировки можно разбить на три части:
сравнение двух элементов, определяющее
![Определение Практически каждый алгоритм сортировки можно разбить на три части: сравнение двух](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176016/slide-2.jpg)
упорядоченность этой пары;
перестановку, меняющую местами неупорядоченную пару элементов;
сортирующий алгоритм, определяющий выбор элементов для сравнения и отслеживающий общую упорядоченность массива данных.
Слайд 4Определение
Сортировка данных в оперативной памяти называется внутренней, а сортировка данных в файлах
![Определение Сортировка данных в оперативной памяти называется внутренней, а сортировка данных в файлах называется внешней](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176016/slide-3.jpg)
называется внешней
Слайд 5Пузырьковая сортировка
Просматривая массив с первого элемента, найти минимальный и поменять его местами
![Пузырьковая сортировка Просматривая массив с первого элемента, найти минимальный и поменять его](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176016/slide-4.jpg)
с первым элементом.
Просматривая массив со второго элемента, найти минимальный и поменять его местами со вторым элементом.
И, так далее, до последнего элемента.
Слайд 6Пузырьковая сортировка
for(i=0;i for(j=k-1;j>i;--j) // просмотр массива ”снизу” ”вверх”
{
![Пузырьковая сортировка for(i=0;i for(j=k-1;j>i;--j) // просмотр массива ”снизу” ”вверх” { if(ms[j-1]>ms[j]) //](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176016/slide-5.jpg)
if(ms[j-1]>ms[j]) // условие замены выполнено
{
m=ms[j-1]; // замена j-1 и j элементов
ms[j-1]=ms[j];
ms[j]=m;
}
}
Слайд 7Сортировка методом Шелла
Сначала сортируются все элементы, отстоящие друг от друга на три
![Сортировка методом Шелла Сначала сортируются все элементы, отстоящие друг от друга на](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176016/slide-6.jpg)
позиции
Затем сортируются элементы, расположенные на расстоянии двух позиций
Наконец, сортируются все соседние элементы
Слайд 8Сортировка методом Шелла
for(gap = k/2; gap > 0; gap /= 2)
do {
![Сортировка методом Шелла for(gap = k/2; gap > 0; gap /= 2)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176016/slide-7.jpg)
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); // окончание этапа сортировки
Слайд 9Сортировка вставками
Упорядочиваются два элемента массива
Вставка третьего элемента в соответствующее место по отношению
![Сортировка вставками Упорядочиваются два элемента массива Вставка третьего элемента в соответствующее место](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176016/slide-8.jpg)
к первым двум элементам.
Этот процесс повторяется до тех пор, пока все элементы не будут упорядочены.
Слайд 10Сортировка вставками
for(i = 1; i < n; i++)
{
value = a[i];
![Сортировка вставками for(i = 1; i { value = a[i]; значение предыдущего](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176016/slide-9.jpg)
значение предыдущего элемента
for (j = i - 1; j >= 0 && a[j] > value; j--)
{
a[j + 1] = a[j];
} сдвиг всех элементов направо
a[j + 1] = value; запись в освободившийся или в тот же элемент
}
Слайд 11Сортировка выбором
Выбирается элемент с наименьшим значением и делается его обмен с первым
![Сортировка выбором Выбирается элемент с наименьшим значением и делается его обмен с](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176016/slide-10.jpg)
элементом массива.
Затем находится элемент с наименьшим значением из оставшихся n-1 элементов и делается его обмен со вторым элементом и т.д. до обмена двух последних элементов.
Слайд 12Сортировка выбором
for(i=0; i{ i1=i;
for(j=i+1;
![Сортировка выбором for(i=0; i { i1=i; for(j=i+1; j if(ms[i1]>ms[j]) i1=j; // фиксируем](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176016/slide-11.jpg)
jif(ms[i1]>ms[j]) i1=j; // фиксируем координату элемента в массиве
m=ms[i]; // замена i1 и i элементов
ms[i]=ms[i1];
ms[i1]=m;
}
Слайд 13Быстрая сортировка
Сортировка Хоара (1960) до сих пор одна из самых быстрых.
Быстрая
![Быстрая сортировка Сортировка Хоара (1960) до сих пор одна из самых быстрых.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176016/slide-12.jpg)
сортировка относится к алгоритмам «разделяй и властвуй».
QuickSort является существенно улучшенным вариантом алгоритма сортировки пузырьком
Слайд 14Алгоритм
Выбрать опорный элемент из массива.
Перераспределить элементы в массиве так, чтобы меньшие
![Алгоритм Выбрать опорный элемент из массива. Перераспределить элементы в массиве так, чтобы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176016/slide-13.jpg)
опорного были перед ним, а большие или равные после.
3. Применить первые два шага к двум подмассивам слева и справа от опорного элемента.
Слайд 15Алгоритм выбора опорного
1.За опорный выбирается средний
2. Два индекса один в начале массива,
![Алгоритм выбора опорного 1.За опорный выбирается средний 2. Два индекса один в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176016/slide-14.jpg)
другой в конце
3. Индексы приближаются друг к другу, пока не найдётся пара элементов, где один больше опорного и расположен перед ним, а второй меньше и расположен после.
4. Эти элементы меняются местами.
Обмен происходит до тех пор, пока индексы не пересекутся. Алгоритм возвращает последний индекс
Слайд 16void hoar(int *ms, int l, int r)
{
int i, j, t;
int sr
![void hoar(int *ms, int l, int r) { int i, j, t;](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176016/slide-15.jpg)
= ms[(l + r) / 2];
i = l; j = r;
do{
while (ms[i] < sr) i++; // ищем слева элемент больше среднего
while (ms[j] > sr) j--; // ищем справа элемент меньше среднего
if (i <= j) // если левая граница не прошла за правую
{
t = ms[i];
ms[i] = ms[j];
ms[j] = t;
i++; j--;
}
} while (i <= j); // пока границы не совпали
if (i < r)
hoar(ms, i, r);
if (j>l)
hoar(ms, l, j);
}
Слайд 17Сортировка в строке
for (i = 0; i < M; i++)
for (j=0;j if
![Сортировка в строке for (i = 0; i for (j=0;j if (matr[1][j]](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176016/slide-16.jpg)
(matr[1][j] < matr[1][i])
{
int temp = matr[1][j];
matr[1][j] = matr[1][i];
matr[1][i] = temp;
}
Слайд 18Сортировка в столбце
for (i = 0; i < n; i++)
for (j=0;j if
![Сортировка в столбце for (i = 0; i for (j=0;j if (matr[i][2]](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1176016/slide-17.jpg)
(matr[i][2] < matr[j][2])
{
int temp = matr[i][2];
matr[i][2] = matr[j][2];
matr[j][2] = temp;
}