Методы сортировки данных дисциплина «Основы алгоритмизации и программирования 2 курс Соколова Наталья Валентиновна, преподаватель спец. Дисциплин [email protected]
Сортировка объектов – расположение объектов по возрастанию или убыванию согласно определенному линейному отношению порядка Сортировка объектов – расположение объектов по возрастанию или убыванию согласно определенному линейному отношению порядка
Сортировка объектов:Сортировка объектов:ВнутренняяВнешняя
Внутренняя сортировка оперирует с массивами, целиком помещающимися в оперативной памяти с произвольным доступом к любой ячейке. Внутренняя сортировка оперирует с массивами, целиком помещающимися в оперативной памяти с произвольным доступом к любой ячейке. Данные обычно сортируются на том же месте, без дополнительных затрат
Алгоритм сортировки вставкой
Суть сортировки: Суть сортировки: Упорядочиваются два элемента массиваВставка третьего элемента в соответствующее место по отношению к первым двум элементам. Этот процесс повторяется до тех пор, пока все элементы не будут упорядочены.
Сортировка вставкой
Постановка задачиПусть нужно отсортировать массив А по возрастанию, в котором N элементов методом вставкиВспомогательные переменныеj – номер первого элемента остатка.i – номер перемещаемого элемента.f – условие выхода из цикла (если f=1, то выход) Val – промежуточное значение, используемое для перемещения элементов массив
Начало алгоритма.Начало алгоритма.Шаг 1 j:=2,Шаг 2 Пока j<=N выполнять:Шаг 2.1 i:=j; f:=0,Шаг 2.2 Пока i>=2 и f=0 выполнять:Шаг 2.2.1 Если A[i-1]>A[i] то Val:=A[i-1]; A[i-1]:=A[i]; A[i]:=Val, иначе f:=1,Шаг 2.2.2 i:=i-1,Шаг 2.3 j:=j+1.Конец алгоритма.
Начало алгоритма.Начало алгоритма.Шаг 1 j:=2,Шаг 2 Пока j<=N выполнять:Шаг 2.1 i:=j; f:=0,Шаг 2.2 Пока i>=2 и f=0 выполнять:Шаг 2.2.1 Если A[i-1]>A[i] то Val:=A[i-1]; A[i-1]:=A[i]; A[i]:=Val, иначе f:=1,Шаг 2.2.2 i:=i-1,Шаг 2.3 j:=j+1.Конец алгоритма.
Начало алгоритма.Начало алгоритма.Шаг 1 j:=2,Шаг 2 Пока j<=N выполнять:Шаг 2.1 i:=j; f:=0,Шаг 2.2 Пока i>=2 и f=0 выполнять:Шаг 2.2.1 Если A[i-1]>A[i] то Val:=A[i-1]; A[i-1]:=A[i]; A[i]:=Val, иначе f:=1,Шаг 2.2.2 i:=i-1,Шаг 2.3 j:=j+1.Конец алгоритма.
Начало алгоритма.Начало алгоритма.Шаг 1 j:=2,Шаг 2 Пока j<=N выполнять:Шаг 2.1 i:=j; f:=0,Шаг 2.2 Пока i>=2 и f=0 выполнять:Шаг 2.2.1 Если A[i-1]>A[i] то Val:=A[i-1]; A[i-1]:=A[i]; A[i]:=Val, иначе f:=1,Шаг 2.2.2 i:=i-1,Шаг 2.3 j:=j+1.Конец алгоритма.
Начало алгоритма.Начало алгоритма.Шаг 1 j:=2,Шаг 2 Пока j<=N выполнять:Шаг 2.1 i:=j; f:=0,Шаг 2.2 Пока i>=2 и f=0 выполнять:Шаг 2.2.1 Если A[i-1]>A[i] то Val:=A[i-1]; A[i-1]:=A[i]; A[i]:=Val, иначе f:=1,Шаг 2.2.2 i:=i-1,Шаг 2.3 j:=j+1.Конец алгоритма.
Начало алгоритма.Начало алгоритма.Шаг 1 j:=2,Шаг 2 Пока j<=N выполнять:Шаг 2.1 i:=j; f:=0,Шаг 2.2 Пока i>=2 и f=0 выполнять:Шаг 2.2.1 Если A[i-1]>A[i] то Val:=A[i-1]; A[i-1]:=A[i]; A[i]:=Val, иначе f:=1,Шаг 2.2.2 i:=i-1,Шаг 2.3 j:=j+1.Конец алгоритма.
Начало алгоритма.Начало алгоритма.Шаг 1 j:=2,Шаг 2 Пока j<=N выполнять:Шаг 2.1 i:=j; f:=0,Шаг 2.2 Пока i>=2 и f=0 выполнять:Шаг 2.2.1 Если A[i-1]>A[i] то Val:=A[i-1]; A[i-1]:=A[i]; A[i]:=Val, иначе f:=1,Шаг 2.2.2 i:=i-1,Шаг 2.3 j:=j+1.Конец алгоритма.
Алгоритм сортировки выбором
Суть сортировки:Суть сортировки:Выбирается элемент с наименьшим значением и делается его обмен с первым элементом массива. Затем находится элемент с наименьшим значением из оставшихся n-1 элементов и делается его обмен со вторым элементом и т.д. до обмена двух последних элементов.
Постановка задачиПусть нужно отсортировать массив А по возрастанию, в котором N элементов методом выбора. Вспомогательные переменныеj – номер первого элемента остатка.i – номер перемещаемого элемента.min – минимальное число в массиве.Imin – номер минимального числа в массиве
Начало алгоритма.Начало алгоритма.Шаг 1 j:=1,Шаг 2 Пока j<=N-1 выполнять: Шаг 2.1 min:=a[j], Imin:=j, i:=j+1 Шаг 2.2 Пока i<=N выполнять: Шаг 2.2.1 Если A[i]<min, то min:=a[i], Imin:=i Шаг 2.2.2 i:=i+1, Шаг 2.3 A[Imin]:=A[j], A[j]:=min Шаг 2.4 j:=j+1. Конец алгоритма.
Начало алгоритма.Начало алгоритма.Шаг 1 j:=1,Шаг 2 Пока j<=N-1 выполнять: Шаг 2.1 min:=a[j], Imin:=j, i:=j+1 Шаг 2.2 Пока i<=N выполнять: Шаг 2.2.1 Если A[i]<min, то min:=a[i], Imin:=i Шаг 2.2.2 i:=i+1, Шаг 2.3 A[Imin]:=A[j], A[j]:=min Шаг 2.4 j:=j+1. Конец алгоритма.
Начало алгоритма.Начало алгоритма.Шаг 1 j:=1,Шаг 2 Пока j<=N-1 выполнять: Шаг 2.1 min:=a[j], Imin:=j, i:=j+1 Шаг 2.2 Пока i<=N выполнять: Шаг 2.2.1 Если A[i]<min, то min:=a[i], Imin:=i Шаг 2.2.2 i:=i+1, Шаг 2.3 A[Imin]:=A[j], A[j]:=min Шаг 2.4 j:=j+1. Конец алгоритма.
Алгоритм сортировки обменом («пузырьковая»)
Суть сортировки:Суть сортировки:Последовательно просматривается массив и сравнивается каждая пара элементов между собой. При этом "неправильное" расположение элементов устраняется путем их перестановки. Процесс просмотра и сравнения элементов повторяется до просмотра всего массива.
Постановка задачиПусть нужно отсортировать массив А по возрастанию, в котором N элементов методом обменаВспомогательные переменныеj – номер первого элемента остатка.i – номер перемещаемого элемента.Val – промежуточное значение, используемое для перемещения элементов массива
Начало алгоритма.Начало алгоритма.Шаг 1 j:=N,Шаг 2 Пока j>=2 выполнять:Шаг 2.1 i:=1; ,Шаг 2.2 Пока i<=j-1выполнять:Шаг 2.2.1 Если A[i]>A[i+1] то Val:=A[i]; A[i]:=A[i+1]; A[i+1]:=Val, Шаг 2.2.2 i=i+1,Шаг 2.3 j:=j-1.Конец алгоритма.
Начало алгоритма.Начало алгоритма.Шаг 1 j:=N,Шаг 2 Пока j>=2 выполнять:Шаг 2.1 i:=1; ,Шаг 2.2 Пока i<=j-1выполнять:Шаг 2.2.1 Если A[i]>A[i+1] то Val:=A[i]; A[i]:=A[i+1]; A[i+1]:=Val, Шаг 2.2.2 i=i+1,Шаг 2.3 j:=j-1.Конец алгоритма.
Начало алгоритма.Начало алгоритма.Шаг 1 j:=N,Шаг 2 Пока j>=2 выполнять:Шаг 2.1 i:=1; ,Шаг 2.2 Пока i<=j-1выполнять:Шаг 2.2.1 Если A[i]>A[i+1] то Val:=A[i]; A[i]:=A[i+1]; A[i+1]:=Val, Шаг 2.2.2 i=i+1,Шаг 2.3 j:=j-1.Конец алгоритма.
Алгоритм сортировки Шелла
Классифицируется как «слияние вставкой»;Классифицируется как «слияние вставкой»;Называется «сортировкой с убывающим шагом»Общий метод, который использует сортировку вставкой, применяет принцип уменьшения расстояния между сравниваемыми элементами
Суть сортировки:Суть сортировки:Сначала сортируются все элементы, отстоящие друг от друга на три позиции Затем сортируются элементы, расположенные на расстоянии двух позиций Наконец, сортируются все соседние элементы
Постановка задачиПусть нужно отсортировать массив А по возрастанию, в котором N элементов методом ШеллаВспомогательные переменныеj – номер первого элемента остатка.i – номер перемещаемого элемента.M- оптимальный шагP– промежуточное значение, используемое для перемещения элементов массива
Начало алгоритма.Начало алгоритма.Шаг 1. M=целая часть N/2Шаг 2. Пока M<>0 выполнять Шаг 2.1. i:=M+1 Шаг 2.2. Пока i<=N выполнять Шаг 2.2.1. P=A[i] Шаг 2.2.2. j=i-M Шаг 2.2.3. Пока j>0 и P<A[j] выполнять Шаг 2.2.3.1 A[j+M]=A[j] Шаг 2.2.3.2 j=j-M Шаг 2.2.4. A[j+M]=P Шаг 2.2.5. i=i+1 Шаг 2.3. M=целая часть M/2Конец алгоритма.
Начало алгоритма.Начало алгоритма.Шаг 1. M=целая часть N/2Шаг 2. Пока M<>0 выполнять Шаг 2.1. i:=M+1 Шаг 2.2. Пока i<=N выполнять Шаг 2.2.1. P=A[i] Шаг 2.2.2. j=i-M Шаг 2.2.3. Пока j>0 и P<A[j] выполнять Шаг 2.2.3.1 A[j+M]=A[j] Шаг 2.2.3.2 j=j-M Шаг 2.2.4. A[j]=P Шаг 2.2.5. i=i+1 Шаг 2.3. M=целая часть M/2Конец алгоритма.
Алгоритм быстрой сортировки
Суть сортировки:Суть сортировки:Выбирается некоторое значение (x)- барьерный элемент, который определяется округлением до целого деления количества сортируемых элементов на 2;Просматриваем массив, двигаясь слева направо, пока не найдется элемент, больший x Затем просматриваем его справа налево, пока не найдется элемент, меньший x
Суть сортировки:Меняем найденные элементы местами. В случае, если не найден наибольший или наименьший элементы, местами меняется средний элемент с найденным наибольшим или наименьшим элементом;Дойдя до середины имеем 2 части массива;Процесс продолжается для каждой части, пока массив не будет отсортирован
Постановка задачиПусть нужно отсортировать массив А по возрастанию, в котором n элементов быстрым методом Вспомогательные переменные:t –конечный элемент массиваm - начальный элемент массиваx – элемент относительно которого перемещаются все остальные элементы.w – промежуточное значение, используемое для перемещения элементов массива
Начало алгоритма.Начало алгоритма.Шаг 1 i=m j=tШаг 2 x=A[округление до целого(m+t)/2]Шаг 3 Пока i<=j выполнять:Шаг 3.1 Если A[i]<x то i:=i+1, иначе Если A[j]>x то j:=j-1 иначе w:=A[i]; A[i]:=A[j]; A[j]:=w i:=i+1, j:=j-1Шаг 4 Если m<j то Алгоритм (A, m, j); Шаг 5 Если i<t то Алгоритм (A, i, t).Конец алгоритма.
Начало алгоритма.Начало алгоритма.Шаг 1 i=m j=tШаг 2 x=A[округление до целого(m+t)/2]Шаг 3 Пока i<=j выполнять:Шаг 3.1 Если A[i]<x то i:=i+1, иначе Если A[j]>x то j:=j-1 иначе w:=A[i]; A[i]:=A[j]; A[j]:=w i:=i+1, j:=j-1Шаг 4 Если m<j то Алгоритм (A, m, j); Шаг 5 Если i<t то Алгоритм (A, i, t).Конец алгоритма.
Начало алгоритма.Начало алгоритма.Шаг 1 i=m j=tШаг 2 x=A[округление до целого(m+t)/2]Шаг 3 Пока i<=j выполнять:Шаг 3.1 Если A[i]<x то i:=i+1, иначе Если A[j]>x то j:=j-1 иначе w:=A[i]; A[i]:=A[j]; A[j]:=w i:=i+1, j:=j-1Шаг 4 Если m<j то Алгоритм (A, m, j); Шаг 5 Если i<t то Алгоритм (A, i, t).Конец алгоритма.
Начало алгоритма.Начало алгоритма.Шаг 1 i=m j=tШаг 2 x=A[округление до целого(m+t)/2]Шаг 3 Пока i<=j выполнять:Шаг 3.1 Если A[i]<x то i:=i+1, иначе Если A[j]>x то j:=j-1 иначе w:=A[i]; A[i]:=A[j]; A[j]:=w i:=i+1, j:=j-1Шаг 4 Если m<j то Алгоритм (A, m, j); Шаг 5 Если i<t то Алгоритм (A, i, t).Конец алгоритма.
Начало алгоритма.Начало алгоритма.Шаг 1 i=m j=tШаг 2 x=A[округление до целого(m+t)/2]Шаг 3 Пока i<=j выполнять:Шаг 3.1 Если A[i]<x то i:=i+1, иначе Если A[j]>x то j:=j-1 иначе w:=A[i]; A[i]:=A[j]; A[j]:=w i:=i+1, j:=j-1Шаг 4 Если m<j то Алгоритм (A, m, j); Шаг 5 Если i<t то Алгоритм (A, i, t).Конец алгоритма.
Начало алгоритма.Начало алгоритма.Шаг 1 i=m j=tШаг 2 x=A[округление до целого(m+t)/2]Шаг 3 Пока i<=j выполнять:Шаг 3.1 Если A[i]<x то i:=i+1, иначе Если A[j]>x то j:=j-1 иначе w:=A[i]; A[i]:=A[j]; A[j]:=w i:=i+1, j:=j-1Шаг 4 Если m<j то Алгоритм (A, m, j); Шаг 5 Если i<t то Алгоритм (A, i, t).Конец алгоритма.
Начало алгоритма.Начало алгоритма.Шаг 1 i=m j=tШаг 2 x=A[округление до целого(m+t)/2]Шаг 3 Пока i<=j выполнять:Шаг 3.1 Если A[i]<x то i:=i+1, иначе Если A[j]>x то j:=j-1 иначе w:=A[i]; A[i]:=A[j]; A[j]:=w i:=i+1, j:=j-1Шаг 4 Если m<j то Алгоритм (A, m, j); Шаг 5 Если i<t то Алгоритм (A, i, t).Конец алгоритма.
Основывается:Основывается:количестве необходимых сравнений количестве пересылок
Параметры оценки алгоритмов Время сортировки - основной параметр, характеризующий быстродействие алгоритма Память – выделяется ли дополнительная память под временное хранение данных
Параметры оценки алгоритмовУстойчивость – отсортированный массив не меняет порядок элементов с одинаковыми значениями.
Параметры оценки алгоритмов Естественность поведения - эффективность метода при обработке уже отсортированных, или частично отсортированных данных. Алгоритм ведет себя естественно, если учитывает эту характеристику входной последовательности и работает лучше
Оценка алгоритма сортировки выбором Общее количество сравнений C =N-l + N-2 + ...+ 1 = (N2-N)/2Общее количество операций n + (n-1) + (n-2) + (n-3) + ... + 1 = 1/2 * ( n2+n ) = Theta(n2)Число обменов < числа сравнений = время сортировки растет квадратично относительно количества элементов
Устойчив ли этот метод?
Если входная последовательность почти упорядочена, то сравнений будет столько жеЕсли входная последовательность почти упорядочена, то сравнений будет столько же
Оценка алгоритма сортировки вставкойДля массива 1 2 3 4 5 6 7 8 потребуется N-1 сравнение.Для массива 8 7 6 5 4 3 2 1 потребуется (N2-N)/2 сравнение.Общее количество операций Theta(n2)
Устойчив ли этот метод?
Не эффективный метод, так как включение элемента связано со сдвигом всех предшествующих элементов на одну позицию, а эта операция неэкономнаНе эффективный метод, так как включение элемента связано со сдвигом всех предшествующих элементов на одну позицию, а эта операция неэкономна
Оценка алгоритма сортировки обменом
Ответьте на следующие вопросы:Устойчив ли этот метод?Естественное ли поведение этого алгоритма?
Очень медленен и малоэффективен. Очень медленен и малоэффективен. На практике, даже с улучшениями, работает, слишком медленно, поэтому почти не применяется.
Сравнение методов простой сортировки
Выбор метода сортировкиПри сортировке маленьких массивов (менее 100 элементов) лучше использовать метод «Всплывающего пузырька»;Если известно, что список уже почти отсортирован, то подойдет любой метод;
Оценка алгоритма ШеллаВремя выполнения пропорционально n1.2, т. к. при каждом проходе используется небольшое число элементов или элементы массива уже находятся в относительном порядке, а упорядоченность увеличивается при каждом новом просмотре данных
Оценка алгоритма быстрой сортировкиЕсли размер массива равен числу, являющемуся степенью двойки (N=2g), и при каждом разделении элемент X находится точно в середине массива, тогда при первом просмотре выполняется N сравнений и массив разделится на две части размерами N/2. Для каждой из этих частей N/2 сравнений и т. д. Следовательно C=N+2*(N/2)+4*(N/4)+...+N*(N/N). Если N не является степенью двойки, то оценка будет иметь тот же порядок
Общее количество операций Theta(n). Общее количество операций Theta(n). Количество шагов деления (глубина рекурсии) составляет приблизительно log n, если массив делится на более-менее равные части. Таким образом, общее быстродействие: O(n log n)Если каждый раз в качестве центрального элемента выбирается максимум или минимум входной последовательности, тогда быстродействие O(n2)
Метод неустойчив. Метод неустойчив. Поведение довольно естественно, если учесть, что при частичной упорядоченности повышаются шансы разделения массива на более равные частиСортировка использует дополнительную память
Итоги:Итоги:Предпочтительным является метод прямого включения;Сортировка методом простого обмена является наихудшей;Быстрая сортировка превосходит все остальные методы сортировки;
Контрольные вопросыЧто такое «сортировка»?В чем заключается метод сортировки отбором?В чем заключается метод сортировки вставками?В чем заключается метод пузырьковой сортировки?В чем заключается метод быстрой сортировки?В чем заключается метод сортировки Шелла?
Контрольные вопросыКакой алгоритм сортировки считается самым простым?Какой алгоритм сортировки считается самым эффективным?Сколько существует групп алгоритмов сортировки?По каким признакам характеризуются алгоритмы сортировки?Что нужно учитывать при выборе алгоритма сортировки?