алгоритмы сортировки.ppt
- Количество слайдов: 17
Алгоритмы сортировки
Терминология и система обозначений Если даны n элементов a 0, a 1, a 2, …. . an-1 то сортировка состоит в их перестановке к виду: ak 0, ak 1, …. . ak[n-1] Таким образом чтобы для некоторой упорядочивающей функции f : f(ak 0)<=f(ak 1)<=f(ak 2)…. . <=f(ak[n-1]) Обычно функция упорядочения не вычисляется по какому-то специальному правилу, а содержится в каждом элементе в виде явной компоненты (поля). Ее значение называется ключом элемента.
Простые методы Классификация алгоритмов в соответствии с их эффективностью, т. е. экономией времени или быстродействием. Удобная мера эффективности - число необходимых сравнений ключей (С) и пересылок элементов (М). Эти числа определяются некоторыми функциями от числа п сортируемых элементов. Хорошие алгоритмы сортировки требуют порядка n*logn сравнений. Простые методы требуют порядка п 2 сравнений ключей. Основные классы: 1. Сортировка вставками. 2. Сортировка выбором. 3. Сортировка обменом.
Сортировка простыми вставками Элементы условно разделяются на готовую последовательность а 0. . . , ai-1 и входную последовательность аi, . . . , аn-1. На каждом шаге, начиная с i = 1 и увеличивая i на единицу, берут i-й элемент входной последовательности и передают в готовую последовательность, вставляя его на подходящее место.
Алгоритм сортировки простыми вставками: For i: = 1 to n-1 do begin x: =a[i]; «вставить х на подходящее место в а 0. . ai-1 end При поиске подходящего места удобно чередовать сравнения и пересылки, т. е. как бы «просеивать» х, сравнивая его с очередным элементом аj и либо вставляя х, либо пересылая аj направо и продвигаясь налево. Закончиться «просеивание» может при двух различных условиях: 1. Найден элемент аj с ключом меньшим, чем ключ х. 2. Достигнут левый конец готовой последовательности.
procedure vstavki; var i, j, x: integer; begin for i : =1 to n-1 do begin x : = a[i]; j : = i; while (j>0) and (x < a[j-1]) do begin a[j] : = a[j-1]; j : = j-1; end ; a[j] : = x end ;
Анализ сортировки простыми вставками
Сортировка бинарными вставками Модификация алгоритм сортировки простыми вставками. Пользуясь тем, что готовая последовательность a 0, . . . , ai-1 в которую нужно включить новый элемент, уже упорядочена. Поэтому здесь можно применить бинарный поиск, который исследует средний элемент готовой последовательности и продолжает деление пополам, пока не будет найдено место включения. К сожалению, улучшение, которое получается, используя метод бинарного поиска, касается только числа сравнений, а не числа необходимых пересылок.
Сортировка простым выбором 1. Выбирается элемент с наименьшим ключом. 2. Он меняется местами с первым элементом а 1. Эти операции затем повторяются с оставшимися n-1 элементами, затем с n-2 элементами, пока не останется только один элемент - наибольший. for i : = 0 to n-1 do begin «присвоить k индекс наименьшего элемента из аi…an-1 «поменять местами аi и аk» end
procedure straightselection; var i, j, k, x: integer; begin for i : = 0 to n-2 do begin k : = i; x : = a[i]; for j : =i+1 to n-1 do if a[j]< x then begin k : = j; x : = a[j] end ; a[k] : = a[i]; a[i] : = x; end ;
Анализ сортировки простым выбором Mmin=3*(n-1)
Сортировка простым обменом Совершаются повторные проходы по массиву, каждый раз просеивая наименьший элемент оставшегося множества, двигаясь к левому концу массива. Этот метод широко известен как сортировка методом пузырька.
procedure bubblesort; var i, j, x: integer; begin for i : =1 to n-1 do for j : = n-1 downto i do if a[j-1] > a[j] then begin x : = a[j-1]; a[j-1] : = a[j]; a[j] : = x end;
Алгоритм шейкер-сортировка Модификация алгоритма метода пузырька: 1. запоминать, производился ли на данном проходе какой-либо обмен. Если нет, то алгоритм может закончить работу. 2. запоминать место (индекс) последнего обмена. Все пары соседних элементов с индексами, меньшими этого индекса k, уже расположены в нужном порядке. Поэтому следующие проходы можно заканчивать на этом индексе 3. менять направление следующих один за другим проходов. Один неправильно расположенный «пузырек» в «тяжелом» конце рассортированного массива всплывет на место за один проход, а неправильно расположенный элемент в «легком» конце будет опускаться на правильное место только на один шаг на каждом проходе. Например, массив 12 18 42 44 55 67 94 06 будет рассортирован при помощи метода пузырька за один проход, а сортировка массива 94 06 12 18 42 44 55 67 потребует семи проходов.
Анализ сортировки методом пузырька Число сравнений в алгоритме простого обмена : C= (n 2 -n)/2 Количества пересылок : Mmin = 0, Мavg = 3*(n 2 -n)/2, Mmax = 3*(n 2 -n)/4 Сортировка обменами хуже, чем сортировка вставками и выбором.
алгоритмы сортировки.ppt