Одномерные массивы: задачи сортировок элементов массива. Лекция 7

Содержание

Слайд 2

Цели и задачи лекции

Цель леции – изучить понятия и классификацию алгоритмов сортировок

Цели и задачи лекции Цель леции – изучить понятия и классификацию алгоритмов
массивов, реализацию алгоритмов простых сортировок и научиться решать задачи на сортировку одномерных массивов с помощью алгоритмов простых сортировок в языке C++.

Слайд 3

Определения

Сортировка – это упорядочивание набора однотипных данных по возрастанию или убыванию.
Сортировка применяется

Определения Сортировка – это упорядочивание набора однотипных данных по возрастанию или убыванию.
для облегчения поиска элементов в упорядоченном множестве. Задача сортировки одна из фундаментных в программировании.
В общем случае сортировку следует понимать как процесс перегруппировки заданного множества объектов в определенном порядке.

Слайд 4

Оценка алгоритмов сортировки

Существует множество различных алгоритмов сортировки. Все они имеют свои положительные

Оценка алгоритмов сортировки Существует множество различных алгоритмов сортировки. Все они имеют свои
и отрицательные стороны. Перечислим общие критерии оценки алгоритмов сортировки:
Скорость работы алгоритма сортировки. Она непосредственно связана с количеством сравнений и количеством обменов, происходящих во время сортировки, причем обмены занимают больше времени.

Слайд 5

Оценка алгоритмов сортировки

Сравнение происходит тогда, когда один элемент массива сравнивается с другим;

Оценка алгоритмов сортировки Сравнение происходит тогда, когда один элемент массива сравнивается с
обмен происходит тогда, когда два элемента меняются местами. Время работы одних алгоритмов сортировки растет экспоненциально, а время работы других логарифмически зависит от количества элементов.
Время работы в лучшем и худшем случаях. Оно имеет значение при анализе выполнения алгоритма, если одна из краевых ситуаций будет встречаться довольно часто.

Слайд 6

Оценка алгоритмов сортировки

Алгоритм сортировки зачастую имеет хорошее среднее время выполнения, но в

Оценка алгоритмов сортировки Алгоритм сортировки зачастую имеет хорошее среднее время выполнения, но
худшем случае он работает очень медленно.
Поведение алгоритма сортировки. Поведение алгоритма сортировки называется естественным, если время сортировки минимально для уже упорядоченного списка элементов, увеличивается по мере возрастания степени неупорядоченности списка и максимально, когда элементы списка расположены в обратном порядке.

Слайд 7

Оценка алгоритмов сортировки

Различные сортировки массивов отличаются по быстродействию. Существуют простые методы сортировок,

Оценка алгоритмов сортировки Различные сортировки массивов отличаются по быстродействию. Существуют простые методы
которые требуют порядка n*n сравнений, где n – количество элементов массива и быстрые сортировки, которые требуют порядка n*ln(n) сравнений. Простые методы удобны для объяснения принципов сортировок, т.к. имеют простые и короткие алгоритмы. Усложненные методы требуют меньшего числа операций, но сами операции более сложные, поэтому для небольших массивов простые методы более эффективны.

Слайд 8

Оценка алгоритмов сортировки

Простые методы сортировки можно разделить на три основные категории:
сортировка методом

Оценка алгоритмов сортировки Простые методы сортировки можно разделить на три основные категории:
"пузырька" (простого обмена);
сортировка методом простого выбора (простой перебор);
сортировка методом простого включения (сдвиг-вставка, вставками, вставка и сдвиг).

Слайд 9

Оценка алгоритмов сортировки

Простые методы сортировки можно разделить на три основные категории:
сортировка методом

Оценка алгоритмов сортировки Простые методы сортировки можно разделить на три основные категории:
"пузырька" (простого обмена);
сортировка методом простого выбора (простой перебор);
сортировка методом простого включения (сдвиг-вставка, вставками, вставка и сдвиг).

Слайд 10

Сортировка методом "пузырька" (простого обмена)

Самый известный алгоритм – пузырьковая сортировка (bubble sort,

Сортировка методом "пузырька" (простого обмена) Самый известный алгоритм – пузырьковая сортировка (bubble
сортировка методом пузырька или просто сортировка пузырьком). Его популярность объясняется интересным названием и простотой самого алгоритма.
Алгоритм попарного сравнения элементов массива в литературе часто называют "методом пузырька", проводя аналогию с пузырьком, поднимающимся со дна бокала с газированной водой. По мере всплывания пузырек сталкивается с другими пузырьками и, сливаясь с ними, увеличивается в объеме.

Слайд 11

Сортировка методом "пузырька" (простого обмена)

Чтобы аналогия стала очевидной, нужно считать, что элементы

Сортировка методом "пузырька" (простого обмена) Чтобы аналогия стала очевидной, нужно считать, что
массива расположены вертикально друг над другом, и их нужно так упорядочить, чтобы они увеличивались сверху вниз.
Алгоритм состоит в повторяющихся проходах по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов.

Слайд 12

Сортировка методом "пузырька" (простого обмена)

Проходы по массиву повторяются до тех пор, пока

Сортировка методом "пузырька" (простого обмена) Проходы по массиву повторяются до тех пор,
на очередном проходе не окажется, что обмены больше не нужны, что означает – массив отсортирован. При проходе алгоритма элемент, стоящий не на своём месте, "всплывает" до нужной позиции.

Слайд 13

Демонстрация сортировки по неубыванию методом "пузырька"

Демонстрация сортировки по неубыванию методом "пузырька"

Слайд 14

Сортировка методом "пузырька" (простого обмена)

//Описание функции сортировки методом "пузырька"
void BubbleSort (int k,int

Сортировка методом "пузырька" (простого обмена) //Описание функции сортировки методом "пузырька" void BubbleSort
x[max]) {
int i,j,buf;
for (i=k-1;i>0;i--)
for (j=0;j if (x[j]>x[j+1]) {
buf=x[j];

Слайд 15

Сортировка методом "пузырька" (простого обмена)

x[j]=x[j+1];
x[j+1]=buf;
}
}

Сортировка методом "пузырька" (простого обмена) x[j]=x[j+1]; x[j+1]=buf; } }

Слайд 16

Сортировка методом "пузырька" (простого обмена)

 

Сортировка методом "пузырька" (простого обмена)

Слайд 17

Сортировка методом "пузырька" (простого обмена)

Пузырьковая сортировка имеет такую особенность: неупорядоченные элементы на

Сортировка методом "пузырька" (простого обмена) Пузырьковая сортировка имеет такую особенность: неупорядоченные элементы
"большом" конце массива занимают правильные положения за один проход, но неупорядоченные элементы в начале массива поднимаются на свои места очень медленно. Поэтому, вместо того чтобы постоянно просматривать массив в одном направлении, в последовательных проходах можно чередовать направления. Таким образом, элементы, сильно удаленные от своих положений, быстро станут на свои места.

Слайд 18

Сортировка методом "пузырька" (простого обмена)

Данная версия пузырьковой сортировки носит название шейкер-сортировки (shaker

Сортировка методом "пузырька" (простого обмена) Данная версия пузырьковой сортировки носит название шейкер-сортировки
sort сортировка перемешиванием, сортировка взбалтыванием, сортировка встряхиванием), поскольку действия, производимые ею с массивом, напоминают взбалтывание или встряхивание. Ниже показана реализация шейкер-сортировки.

Слайд 19

Сортировка методом "пузырька" (простого обмена)

//Описание функции шейкер-сортировки
void Shaker(int k,int x[max]){
int i,t;

Сортировка методом "пузырька" (простого обмена) //Описание функции шейкер-сортировки void Shaker(int k,int x[max]){
bool exchange;
do {
exchange = false;
for(i=k-1; i > 0; --i) {
if(x[i-1] > x[i]) {

Слайд 20

Сортировка методом "пузырька" (простого обмена)

t = x[i-1];
x[i-1] = x[i];
x[i]

Сортировка методом "пузырька" (простого обмена) t = x[i-1]; x[i-1] = x[i]; x[i]
= t;
exchange = true;
}
}
for(i=1; i < k; ++i) {
if(x[i-1] > x[i]) {

Слайд 21

Сортировка методом "пузырька" (простого обмена)

t = x[i-1];
x[i-1] = x[i];
x[i]

Сортировка методом "пузырька" (простого обмена) t = x[i-1]; x[i-1] = x[i]; x[i]
= t;
exchange = true;
}
}
} while(exchange);
//сортировать до тех пор, пока не будет обменов
}

Слайд 22

Сортировка методом "пузырька" (простого обмена)

 

Сортировка методом "пузырька" (простого обмена)

Слайд 23

Сортировка методом простого выбора (простой перебор)

Это наиболее естественный алгоритм упорядочивания. При данной

Сортировка методом простого выбора (простой перебор) Это наиболее естественный алгоритм упорядочивания. При
сортировке из массива выбирается элемент с наименьшим значением и обменивается с первым элементом. Затем из оставшихся n - 1 элементов снова выбирается элемент с наименьшим ключом и обменивается со вторым элементом, и т.д.

Слайд 24

Сортировка методом простого выбора (простой перебор)

Шаги алгоритма:
находим минимальное значение в текущей части

Сортировка методом простого выбора (простой перебор) Шаги алгоритма: находим минимальное значение в
массива;
производим обмен этого значения со значением на первой неотсортированной позиции;
далее сортируем хвост массива, исключив из рассмотрения уже отсортированные элементы.

Слайд 25

Демонстрация сортировки по неубыванию методом простого выбора

Демонстрация сортировки по неубыванию методом простого выбора

Слайд 26

Сортировка методом простого выбора (простой перебор)

//Описание функции сортировки методом простого выбора
void SelectionSort

Сортировка методом простого выбора (простой перебор) //Описание функции сортировки методом простого выбора
(int k,int x[max]) {
int i,j,min,temp;
for (i=0;i //устанавливаем начальное значение минимального индекса
min=i;

Слайд 27

Сортировка методом простого выбора (простой перебор)

//находим минимальный индекс элемента
for (j=i+1;j if

Сортировка методом простого выбора (простой перебор) //находим минимальный индекс элемента for (j=i+1;j
(x[j] min=j;
//меняем значения местами }
temp=x[i];
x[i]=x[min];
x[min]=temp;
}
}

Слайд 28

Сортировка методом простого выбора (простой перебор)

 

Сортировка методом простого выбора (простой перебор)

Слайд 29

Сортировка методом простого включения (сдвиг-вставка, вставками, вставка и сдвиг)

Хотя этот метод сортировки

Сортировка методом простого включения (сдвиг-вставка, вставками, вставка и сдвиг) Хотя этот метод
намного менее эффективен, чем сложные алгоритмы (такие как быстрая сортировка), у него есть ряд преимуществ:
прост в реализации;
эффективен на небольших наборах данных, на наборах данных до десятков элементов может оказаться лучшим;
эффективен на наборах данных, которые уже частично отсортированы;
это устойчивый алгоритм сортировки (не меняет порядок элементов, которые уже отсортированы);

Слайд 30

Сортировка методом простого включения (сдвиг-вставка, вставками, вставка и сдвиг)

может сортировать массив по

Сортировка методом простого включения (сдвиг-вставка, вставками, вставка и сдвиг) может сортировать массив
мере его получения;
не требует временной памяти, даже под стек.
На каждом шаге алгоритма выбираем один из элементов входных данных и вставляем его на нужную позицию в уже отсортированной последовательности до тех пор, пока набор входных данных не будет исчерпан. Метод выбора очередного элемента из исходного массива произволен; может использоваться практически любой алгоритм выбора.

Слайд 31

Демонстрация сортировки по неубыванию методом простого включения

Демонстрация сортировки по неубыванию методом простого включения

Слайд 32

Сортировка методом простого включения (сдвиг-вставка, вставками, вставка и сдвиг)

//Описание функции сортировки методом

Сортировка методом простого включения (сдвиг-вставка, вставками, вставка и сдвиг) //Описание функции сортировки
простого включения
void InsertSort (int k,int x[max]) {
int i,j, temp;
for (i=0;i //цикл проходов, i - номер прохода
temp=x[i];

Слайд 33

Сортировка методом простого включения (сдвиг-вставка, вставками, вставка и сдвиг)

//поиск места элемента
for

Сортировка методом простого включения (сдвиг-вставка, вставками, вставка и сдвиг) //поиск места элемента
(j=i-1; j>=0 && x[j]>temp; j--)
x[j+1]=x[j];//сдвигаем элемент вправо, пока не дошли
//место найдено, вставить элемент
x[j+1]=temp;
}
}

Слайд 34

Сортировка методом простого выбора (простой перебор)

 

Сортировка методом простого выбора (простой перебор)