Алгоритмы быстрой сортировки
Метод сортировки разделением, предложенный Ч. Хоаром. Сортировка методом Шелла: достоинства и недостатки. Пирамидальная сортировка, ее сущность и особенности. Реализация алгоритма быстрой и пирамидальной сортировки на языке программирования Turbo Pascal.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 12.07.2012 |
Размер файла | 201,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство Образования и Науки РФ ГОУ ВПО
«Дагестанский Государственный Технический Университет»
Филиал в г.Дербент
Курсовая работа
по дисциплине: «Структуры и алгоритмы обработки данных»
на тему:
«Алгоритмы быстрой сортировки»
Выполнил:
Студент 2 курса
Факультета ПОВТ и АС
Группы Д051
Проверил:
Ст. преподаватель
Дербент 2012 г.
Аннотация
В данной курсовой работе рассматриваются различные методы сортировок (метод Шелла, пирамидальная сортировка, сортировка разделением) Будет проведен анализ этих алгоритмов, их эффективности. В приложении представлены реализации алгоритмов быстрой и пирамидальной сортировок на языке Turbo Pascal.
Содержание
Введение
Быстрая сортировка (сортировка разделением)
Сортировка методом Шелла
Пирамидальная сортировка
Заключение
Приложение 1 (Реализация алгоритма быстрой сортировки на языке программирования Turbo Pascal)
Приложение 2 (Реализация алгоритма пирамидальной сортировки на языке программирования Turbo Pascal)
Список использованной литературы
Введение
Алгоритм сортировки -- это алгоритм для упорядочения элементов в списке. В случае, когда элемент списка имеет несколько полей, поле, служащее критерием порядка, называется ключом сортировки
Алгоритмы сортировки оцениваются по скорости выполнения и эффективности использования памяти:
· Время -- основной параметр, характеризующий быстродействие алгоритма. Называется также вычислительной сложностью. Для упорядочения важны худшее, среднее и лучшее поведение алгоритма в терминах мощности входного множества A. Если на вход алгоритму подаётся множество A, то обозначим n = | A | . Для типичного алгоритма хорошее поведение -- это и плохое поведение -- это . Идеальное поведение для упорядочения -- . Алгоритмы сортировки, использующие только абстрактную операцию сравнения ключей всегда нуждаются по меньшей мере в сравнениях. Тем не менее, существует алгоритм сортировки Хана (Yijie Han) с вычислительной сложностью , использующий тот факт, что пространство ключей ограничено (он чрезвычайно сложен, а за О-обозначением скрывается весьма большой коэффициент, что делает невозможным его применение в повседневной практике). Также существует понятие сортирующих сетей. Предполагая, что можно одновременно (например, при параллельном вычислении) проводить несколько сравнений, можно отсортировать n чисел за операций . При этом число n должно быть заранее известно;
· Память -- ряд алгоритмов требует выделения дополнительной памяти под временное хранение данных. Как правило, эти алгоритмы требуют памяти. При оценке не учитывается место, которое занимает исходный массив и независящие от входной последовательности затраты, например, на хранение кода программы (так как всё это потребляет) . Алгоритмы сортировки, не потребляющие дополнительной памяти, относят к сортировкам на месте.
Ещё одним важным свойством алгоритма является его сфера применения. Здесь основных типов упорядочения два:
· Внутренняя сортировка оперирует массивами, целиком помещающимися в оперативной памяти с произвольным доступом к любой ячейке. Данные обычно упорядочиваются на том же месте без дополнительных затрат.
o В современных архитектурах персональных компьютеров широко применяется подкачка и кэширование памяти. Алгоритм сортировки должен хорошо сочетаться с применяемыми алгоритмами кэширования и подкачки.
· Внешняя сортировка оперирует запоминающими устройствами большого объёма, но с доступом не произвольным, а последовательным (упорядочение файлов), т. е. в данный момент мы 'видим' только один элемент, а затраты на перемотку по сравнению с памятью неоправданно велики. Это накладывает некоторые дополнительные ограничения на алгоритм и приводит к специальным методам упорядочения, обычно использующим дополнительное дисковое пространство. Кроме того, доступ к данным на носителе производится намного медленнее, чем операции с оперативной памятью.
o Доступ к носителю осуществляется последовательным образом: в каждый момент времени можно считать или записать только элемент, следующий за текущим.
o Объём данных не позволяет им разместиться в ОЗУ.
Быстрая сортировка (сортировка разделением)
Метод сортировки разделением был предложен Чарльзом Хоаром в 1962 г. Этот метод является развитием метода простого обмена и настолько эффективен, что его стали называть "методом быстрой сортировки - Quicksort".
Быстрая сортировка является блестящим примером систематического применения принципов разделяй и властвуй и балансировка к сортировке обменами.
На первом этапе быстрой сортировки упорядочиваемый массив реорганизуется. Для этого в массиве выбирается главный элемент a[p]. Затем все элементы с ключами, меньшими a[p].key, размещаются слева от главного элемента, а элементы с ключами, большими либо равными a[p].key, размещаются справа от него.
Затем для полной сортировки массива достаточно (второй этап):
а) больше не трогать главный элемент, который находится на своем месте;
б) рекурсивно отсортировать подмассив A[1,p-1];
в) рекурсивно отсортировать подмассив A[p+1,n].
Реализуя второй этап, на практике обычно не устанавливают на свое место главный элемент, а просто включают его в один из подмассивов, например:
а) рекурсивно отсортировать подмассив A[1,p];
б) рекурсивно отсортировать подмассив A[p+1,n].
Выбор главного элемента
Это очень важный момент в алгоритме быстрой сортировки. Именно неудачный выбор на каждом шаге главного элемента обуславливает плохой показатель максимальной сложности. Пусть на некотором шаге на вход процедуры быстрой сортировки QuickSort поступили элементы массива с индексами от first до last. Тогда лучший способ выбрать главный элемент заключается в использованиигенератора случайных чисел для порождения целого числа p, first<=p<=last. Это число и определяет индекс главного элемента.
Реорганизация массива относительно главного элемента
Двигаясь от элемента с индексом first вправо, находят элемент с индексом f, ключ которого не меньше ключа главного элемента. Двигаясь от элемента с индексом last влево, находят элемент с индексом l, ключ которого не больше ключа главного элемента. Если оказалось, что элемент с индексом f расположен левее элемента с индексом l, то их меняют местами. Дальше движение влево продолжают с позиции f+1, движение вправо - с позиции l-1 до тех пор, пока не произойдет встреча.
Пример. Произвести разбивку массива 26, 49, 34, 1, 12, 37, 1, 38, 23 на два подмассива, приняв в качестве главного элемента a=23.
Решение.
Шаг 1. f=1, a[f]=26, l=9, a[l]=23; новый массив: 23, 49, 34, 1, 12, 37, 1, 38, 26.
Шаг 2. f=2, a[f]=49, l=7, a[l]=1; новый массив: 23, 1, 34, 1, 12, 37, 49, 38, 26.
Шаг 3. f=3, a[f]=34, l=5, a[l]=12; новый массив: 23, 1, 12, 1, 34, 37, 49, 38, 26.
Шаг 4. f=5, l=4; так как f>l, процесс завершен. Первый подмассив с индексами 1..l: 23, 1, 12, 1. Второй подмассив с индексами f..n: 34, 37, 49, 38, 26.
Парадокс быстрой сортировки заключается в том, что в противоположность сортировке включением и даже пузырьковой сортировке она теряет свои качества на частично упорядоченных массивах.
В большом массиве следует останавливать рекурсию, когда размеры подмассивов становятся меньше некоторой константы, называемойпорогом. После этого используется метод, эффективность которого может улучшаться на частично отсортированных данных, например, сортировка включением:
if last-first>порог then быстрая сортировка(...) else сортировка включением(...);.
Значение порога определяется характеристиками конкретной ЭВМ.
Быстрая сортировка рекомендуется для упорядочения последовательностей с размерностью от 100 и более элементов.
QuickSort является существенно улучшенным вариантом алгоритма сортировки с помощью прямого обмена, известного, в том числе, своей низкой эффективностью. Принципиальное отличие состоит в том, что после каждого прохода элементы делятся на две независимые группы. Любопытный факт: улучшение самого неэффективного прямого метода сортировки дало в результате эффективный улучшенный метод.
Ниже представлена процедура, реализующая алгоритм быстрой сортировки.
§ Лучший случай. Для этого алгоритма самый лучший случай -- если в каждой итерации каждый из подмассивов делился бы на два равных по величине массива. В результате количество сравнений, делаемых быстрой сортировкой, было бы равно значению рекурсивного выражения CN = 2CN/2+N, что в явном выражении дает примерно N lg N сравнений. Это дало бы наименьшее время сортировки.
§ Среднее. Даёт в среднем O(n log n) обменов при упорядочении n элементов. В реальности именно такая ситуация обычно имеет место при случайном порядке элементов и выборе опорного элемента из середины массива либо случайно.
§ На практике (в случае, когда обмены являются более затратной операцией, чем сравнения) быстрая сортировка значительно быстрее, чем другие алгоритмы с оценкой O(n lg n), по причине того, что внутренний цикл алгоритма может быть эффективно реализован почти на любой архитектуре. 2CN/2 покрывает расходы по сортировке двух полученных подмассивов; N -- это стоимость обработки каждого элемента, используя один или другой указатель. Известно также, что примерное значение этого выражения равно CN = N lg N.
§ Худший случай. Худшим случаем, очевидно, будет такой, при котором на каждом этапе массив будет разделяться на вырожденный подмассив из одного опорного элемента и на подмассив из всех остальных элементов. Такое может произойти, если в качестве опорного на каждом этапе будет выбран элемент либо наименьший, либо наибольший из всех обрабатываемых.
§ Худший случай даёт O(nІ) обменов. Но количество обменов и, соответственно, время работы -- это не самый большой его недостаток. Хуже то, что в таком случае глубина рекурсии при выполнении алгоритма достигнет n, что будет означать n-кратное сохранение адреса возврата и локальных переменных процедуры разделения массивов. Для больших значений n худший случай может привести к исчерпанию памяти во время работы алгоритма. Впрочем, на большинстве реальных данных можно найти решения, которые минимизируют вероятность того, что понадобится квадратичное время.
Рассмотрим достоинства и недостатки быстрой сортировки.
Достоинства:
§ Самый быстродействующий (на практике) из всех существующих алгоритмов обменной сортировки -- быстрее него только специализированные алгоритмы, использующие специфику сортируемых данных.
§ Простая реализация.
§ Хорошо сочетается с алгоритмами кэширования и подкачки памяти.
§ Хорошо работает на «почти отсортированных» данных -- если исходный массив уже близок к отсортированному, алгоритм не приводит к излишним перестановкам уже стоящих в правильном порядке элементов.
§ Существует очень эффективная разновидность (алгоритм Седжвика) для сортировки строк -- сначала сравнение с опорным элементом только по нулевому символу строки, далее применение аналогичной сортировки для «большего» и «меньшего» массивов тоже по нулевому символу, и для «равного» массива по уже первому символу.
Недостатки:
§ Сильно деградирует как по скорости (до O(nІ)), так и по потреблению памяти, при неудачном выборе опорного элемента, который неизбежно случится при неудачных входных данных.
§ Примитивные реализации легко приводят к ошибке переполнения стека, особенно в средах, где размер стека сильно ограничен (ядра ОС). Развитые же реализации требуют постоянного выделения все новых и новых небольших блоков памяти, что не оптимально.
§ Неустойчив -- если требуется устойчивость, приходится расширять ключ.
Сортировка методом Шелла
алгоритм быстрая сортировка
Этот метод был предложен автором Donald Lewis Shеll в 1959 г. Основная идея этого алгоритма заключается в том, чтобы в начале ycтpанить массовый беспорядок в массиве, сравнивая далеко стоящие друг от друга элементы
Чтобы понять, как работает метод Шелла, необходимо разобраться в механизме работы метода вставки
Сортировка включением состоит в следующем: выбирается некоторый элемент, сортируются другие элементы, после чего выбранный элемент “включается”, т.е. устанавливается на свое место среди других элементов. Рассмотрим подробнее соответствующий алгоритм.
...
for i:=2 to n do
begin
buf:=a[i]; y:=a[i].key; j:=i-1;
while (j>0) and (a[j].key>y) do begin a[j+]:=a[j]; j:=j-1 end
a[j+1]:=buf;
end
...
Таблица 3.1 иллюстрирует работу сортировки включением.
Таблица 3.1.
Начальные данные |
i=3 (ситуация не изменилась: элемент с кл. 44 уже стоит на своем месте относительно элементов с кл. 22 и 33) |
||||||||||
j |
1 |
2 |
3 |
4 |
j |
1 |
2 |
3 |
4 |
||
a[j].key |
33 |
22 |
44 |
11 |
a[j].key |
22 |
33 |
44 |
11 |
||
i=2 (элемент с кл. 22 встал на свое место относительно элемента с кл. 33) |
i=4 (элемент с кл. 11 встал на свое место относительно элементов с кл. 22, 33, 44) |
||||||||||
j |
1 |
2 |
3 |
4 |
j |
1 |
2 |
3 |
4 |
||
a[j].key |
22 |
33 |
44 |
11 |
a[j].key |
11 |
22 |
33 |
44 |
У этого алгоритма есть одно важное достоинство: в противоположность другим методам он имеет наилучшую эффективность, если в начальном массиве уже установлен некоторый порядок.
Пример. Если элемент с ключом 44 уже стоял на своем месте относительно элементов с ключами 22 и 33 (см. табл. 3.1), то на третьем шаге его не понадобилось передвигать.
Средняя и максимальная сложность алгоритма сортировки включением составляют O(n2), если все перестановки предполагаются равновероятными. Такая низкая эффективность объясняется тем, что каждый элемент перемещается за один раз только на одну позицию: еслиm-й элемент массива должен быть перемещен в позицию 1, необходимо переместить на одну позицию вправо m-1 предшествующих элементов.
Пример. Чтобы поставить элемент с ключом 11 на свое место (см. табл. 3.1), на четвертом шаге пришлось передвинуть элементы с ключами 22, 33, 44.
Усовершенствованная сортировка включением известна как сортировка Шелла. В 1959 году Д.Л.Шелл предложил вместо систематического включения элемента с индексом i в подмассив предшествующих ему элементов (этот способ противоречит принципу “балансировки”, почему и не позволяет получить эффективный алгоритм) включать этот элемент в подсписок, содержащий элементы с индексами i-h, i-2h, i-3h и т.д., где h - некоторая натуральная постоянная. Таким образом формируется массив, в котором h-серии элементов, отстоящих друг от друга на расстояние h, сортируются отдельно:
После того, как отсортированы непересекающиеся h-серии, процесс возобновляется с новым значением h'<h. Предварительная сортировка серий с расстоянием h значительно ускоряет сортировку серий с расстоянием h'.
Для достаточно больших массивов результаты тестов показывают, что рекомендуемой можно считать последовательность таких hi, что hi+1=3 hi +1: ..., 364, 121, 40, 13, 4, 1. Начать процесс следует с такого элемента этой последовательности, который является ближайшим к целой части числа (n/9), превосходящим это число.
Пример. Если сортируется последовательность из n=1000 элементов, то целая часть числа (n/9) составит 111, значит h следует выбрать равным 121.
Ниже представлена процедура, реализующая метод Шелла.
Procedure ShellSort;
var h,j,k,y,kh:integer; buf:node;
begin
h:=1; while h<(n div 9) do h:=3*h+1;
while h>0 do
begin
for k:=1 to h do
begin
kh:=k+h;
while (kh<=n) do
begin
buf:=a[kh]; y:=buf.key; j:=kh-h;
while (j>=1) and (y<a[j].key) do begin a[j+h]:=a[j]; j:=j-h end;
a[j+h]:=buf; kh:=kh+h;
end
end;
h:=h div 3;
end
end; {* Shell*}
Эффективность метода Шелла объясняется тем, что сдвигаемые элементы быстро попадают на нужные места. Среднее время для сортировки Шелла равняется O(n^1.25), для худшего случая оценкой является O(n^1.5). Также следует сказать, что дополнительной памяти данный алгоритм не требует, но и не гарантирует сохранение порядка элементов с одинаковыми значениями.
Доказано, что максимальная сложность алгоритма Шелла составляет O(n5/4).
Доказано,что максимальная сложность алгоритма Шелла составляет O(n5/4). Так как
то этот вид сортировки пригоден для последовательностей, имеющих примерно до 70 тыс. элементов.
Пирамидальная сортировка
Пирамидальная сортировка является улучшенным вариантом сортировки выбором, в которой на каждом шаге должен определяться наименьший элемент в необработанном наборе данных.
Пирамида определяется как некоторая последовательность ключей
K[L], …, K[R],
такая, что
K[i] K[2i] K[i] K[2i+1], (12.1)
для всякого i = L, …, R/2. Если имеется массив K[1], K[2], …, K[R], который индексируется от 1, то этот массив можно представить в виде двоичного дерева. Пример такого представления при R=10 показан на рисунке 12.4.
Рисунок 12.4 Массив ключей, представленный в виде двоичного дерева
Дерево, изображенное на рисунке 12.4, представляет собой пирамиду, поскольку для каждого i = 1, 2, …, R/2 выполняется условие (12.1). Очевидно, последовательность элементов с индексами i = R/2+1, R/2+2, …, R (листьев двоичного дерева), является пирамидой, поскольку для этих индексов в пирамиде нет сыновей.
Способ построения пирамиды «на том же месте» был предложен Р. Флойдом. В нем используется процедура просеивания, которую рассмотрим на следующем примере.
Предположим, что дана пирамида с элементами K[3], K[4], …, K[10] нужно добавить новый элемент K[2] для того, чтобы сформировать расширенную пирамиду K[2], K[3], K[4], …, K[10]. Возьмем, например, исходную пирамиду K[3], …, K[10], показанную на рисунке 12.5, и расширим эту пирамиду «влево», добавив элемент K[2]=44.
Рисунок 12.5 Пирамида, в которую добавляется ключ K[2]=44
Добавляемый ключ K[2] просеивается в пирамиду: его значение сравнивается с ключами узлов-сыновей, т. е. со значениями 15 и 28. Если бы оба ключа-сына были больше, чем просеиваемый ключ, то последний остался бы на месте, и просеивание было бы завершено. В нашем случае оба ключа_сына меньше, чем 44, следовательно, вставляемый ключ меняется местами с наименьшим ключом в этой паре, т. е. с ключом 15. Ключ 44 записывается в элемент K[4], а ключ 15 в элемент K[2]. Просеивание продолжается, поскольку ключи-сыновья нового элемента K[4] оказываются меньше его, происходит обмен ключей 44 и 18. В результате получаем новую пирамиду, показанную на рисунке 12.6.
В нашем примере получалось так, что оба ключа-сына просеиваемого элемента оказывались меньше его. Это не обязательно: для инициализации обмена достаточно того, чтобы оказался меньше хотя бы один сыновий ключ, с которым и производится обмен.
Просеивание элемента завершается при выполнении любого из двух условий: либо у него не оказывается потомков в пирамиде, либо значение его ключа не превышает значений ключей обоих сыновей.
Рисунок 12.6 Просеивание ключа 44 в пирамиду
Число итерация в процедуре просеивания не превосходит высоты пирамиды. Высота полного бинарного дерева из N узлов (пирамида является полным бинарным деревом), равна log2(N). Оба этапа сортировки реализуются циклами с количеством итераций, не превосходящими N, поэтому итоговая сложность пирамидальной сортировки - O(NlogN), причем эта оценка достигается даже в худшем случае.
Рассмотрим достоинства и недостатки пирамидальной сортировки.
Достоинства:
· Имеет доказанную оценку худшего случая O.
· Требует всего O дополнительной памяти.
Недостатки:
· Сложен в реализации.
· Неустойчив -- для обеспечения устойчивости нужно расширять ключ.
· На почти отсортированных массивах работает столь же долго, как и на хаотических данных.
· На одном шаге выборку приходится делать хаотично по всей длине массива -- поэтому алгоритм плохо сочетается с кэшированием и подкачкой памяти.
Заключение
В данной курсовой работе были рассмотрены различные алгоритмы сортировок (сортировка разделением, сортировка методом шелла и пирамидальная сортировка). Я провела анализ эффективности данных алгоритмов. В курсовой работе были выявлены достоинства и недостатки рассмотренных сортировок.
Для алгоритмов быстрой и пирамидальной сортировок приводятся программы на языке Turbo Pascal. Также в работе представлена процедура, реализующая метод шелла, написанная на языке программирования Turbo Pascal.
В ходе выполнения курсовой работы я получила практический опыт и изучила алгоритмы, которые я смогу использовать при решении задач более широкого класса.
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
1. Дональд Кнут Искусство программирования, том 3. Сортировка и поиск = The Art of Computer Programming, vol.3. Sorting and Searching. -- 2-е изд. -- М.: «Вильямс», 2007. -- С. 824. -- ISBN 5-8459-0082-4.
2. Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн Алгоритмы: построение и анализ = INTRODUCTION TO ALGORITHMS. -- 2-е изд. -- М.: «Вильямс», 2006. -- С. 1296. -- ISBN 5-8459-0857-4;
3. http://xn--90abr5b.xn--p1ai/wiki/doku.php?id=examination:saod:list_of_questions
Приложение 1
Реализация алгоритма быстрой сортировки на языке программирования Turbo Pascal
Program QSort; { быстрая сортировка Хоара }
Uses Crt;
Const M=100;
Type index=0..m;
Var
A: array [1..M] of integer;
K, R, N: index;
I, J, L, X, W: integer;
B: boolean;
Procedure Vvod(var N: index);
{ N-фактическое число элементов }
Begin
B:=True; N:=0;
While B do
begin
Write('Введите ключ (-1 - конец): ');
ReadLn(L);
if L>=0 then
begin
N:=N+1;
A[N]:=L
end
else B:=False
end;
End;
Procedure Vivod;
Begin
WriteLn;
For I:=1 to N do
Write(' ', A[I])
End;
Procedure Sort(K, R: index);
Begin
I:=K; { нижний индекс }
J:=R; { верхний индекс }
X:=A[(K+R) div 2];
Repeat
While A[I]<X do I:=I+1;
While A[J]>X do J:=J-1;
if I<=J then { A[I]>=X>=A[J] }
begin
W:=A[I]; A[I]:=A[J]; A[J]:=W;
I:=I+1; J:=J-1 { стало A[I-1]<=X<=A[J+1] }
end
Until I>J;
{ A[L]<=X для L=K,K+1,...,J }
{ A[L]>=X для L=I,...,R }
if K<J then Sort(K, J);
if I<R then Sort(I, R)
End;
Begin
ClrScr;
Vvod(n);
Sort(1, N);
Vivod;
ReadLn
End.
Приложение 2
Реализация алгоритма пирамидальной сортировки на языке программирования Turbo Pascal
Program Piramida; { пирамидальная сортировка }
Uses Crt;
Const M=100; { например }
Type Index=0..m;
Var
A: array [1..M] of integer;
L, R, N: index;
I, J, K, X: integer;
B: boolean;
Procedure Vvod(var n: Index);
{ N-фактическое число элементов }
Begin
B:=True; N:=0;
While B do
begin
Write('Введите ключ (-1 - конец): ');
ReadLn(L);
if L>=0 then
begin
N:=N+1;
A[N]:=L;
end
else B:=False
end;
End;
Procedure Vivod;
Begin
WriteLn;
For I:=1 to N do
Write(' ', A[I])
End;
Procedure Proseiv;
{ просеивание элемента A[K] в пирамиде A[K+1], A[K+2], …, A[R] }
Begin
B:=True; I:=K; J:=2*K; X:=A[K];
While (J<=R) and B do
begin
if J<R then { иначе один преемник у A[K] }
if A[J]>A[J+1] then J:=J+1;
if X>A[J] then
begin { спуск на уровень }
A[I]:=A[J]; I:=J; J:=2*J
end
else B:=False
{ в 2 последних операторах IF знаки сравнения '<', }
{ если в корень пирамиды посылается MAX значение }
end;
A[I]:=X;
End;
Begin { основная программа }
ClrScr;
Vvod(N);
K:=(N div 2)+1; R:=N;
While K>1 do
begin
K:=K-1;
Proseiv
end;
{ далее сортировка пирамиды на месте }
{ сейчас K=1 }
While R>1 do
begin
X:=A[1]; A[1]:=A[R]; A[R]:=X; R:=R-1;
Proseiv
end;
Vivod;
ReadLn
End.
Размещено на Allbest.ru
Подобные документы
Понятие алгоритма и сортировки. Способы и алгоритмы сортировки массивов. Быстрая сортировка Хоара. Описание алгоритма "быстрой сортировки". Реализация на языке программирования. Анализ наихудшего разбиения. Вероятностные алгоритмы быстрой сортировки.
курсовая работа [291,5 K], добавлен 22.03.2012Обработка массивов элементов любого типа как главное назначение алгоритмов сортировки. Анализ наиболее используемых алгоритмов сортировки: пузырьком, выбором, вставками, методом Шелла и быстрой сортировкой. Основные требования к алгоритмам сортировки.
реферат [189,8 K], добавлен 06.12.2014Изучение алгоритмов внутренней сортировки массивов данных, сравнение сложности их реализации и производительности. Отличительные черты сортировки включением, выбором, разделением, сортировки Шелла, обменной сортировки. Сравнение методов: плюсы и минусы.
курсовая работа [203,8 K], добавлен 03.12.2010Анализ эффективности методов сортировки данных в языке Turbo Pascal. Разработка эскизного и технического проекта программы. Сортировка без и с использованием дополнительной памяти, за исключением небольшого стека (массива). Сортировка связанных списков.
курсовая работа [359,0 K], добавлен 23.05.2012Анализ основных алгоритмов внутренней сортировки массивов данных, сравнение сложности их реализации и производительности. Сортировка пузырьком, методами вставок, выбора, методом Шелла, быстрая сортировка. Операция разделения массива внутренней сортировки.
курсовая работа [161,7 K], добавлен 17.12.2015Исследование основных особенностей алгоритмов быстрой и поразрядной сортировки данных. Построение графиков зависимости времени сортировки от количества элементов в файле и от степени перемешенности элементов. Описания сортировки чисел и строковых данных.
лабораторная работа [1,2 M], добавлен 23.07.2012Разработка программы, сортирующей массивы данных различного типа методом подсчета. Основные шаги алгоритма сортировки, ее свойства и модификация подсчетом. Целесообразность применения сортировки подсчетом. Условия эффективности алгоритма сортировки.
лабораторная работа [438,5 K], добавлен 16.07.2015Сортировка как процесс расстановки элементов "в некотором порядке", ее структура и основные компоненты, характеристика методов. Порядок выбора того или иного метода сортировки: линейный с обменом и подсчетом, методом Шелла, с отложенными обменами.
реферат [27,1 K], добавлен 13.09.2009Определение понятия, видов и задач сортировки. Рассмотрение основ построения простых и улучшенных алгоритмов сортировки, анализ числа операций. Линейная и пирамидальная организация данных. Основные правила нижней оценки числа операций в алгоритмах.
презентация [274,5 K], добавлен 19.10.2014Реализация различных методов сортировки. Алгоритмические языки программирования. Обработка большого числа единообразно организованных данных. Алгоритмы сортировки массивов. Анализ проблем реализации и использования различных видов сортировок массивов.
курсовая работа [640,3 K], добавлен 07.07.2011