Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Algoritmizatsia_i_programmirovanie / Сортировка и поиск Пособие.doc
Скачиваний:
57
Добавлен:
17.03.2015
Размер:
424.45 Кб
Скачать

Министерство образования и науки российской федерации

Государственное образовательное учреждение

Высшего профессионального образования

Уфимский государственный нефтяной Технический университет

Филиал в г.Салавате

Кафедра "Общенаучные дисциплины"

Алгоритмы сортировки и поиска

УЧЕБНО-МЕТОДИЧЕСКОЕ ПОСОБИЕ

по курсу

"Основы алгоритмизации и программирование"

Салават 2011

Предназначено для студентов всех специальностей очной и очно-заочной форм обучения, изучающих данный курс.

Составитель Кузьминых П.В.., доц., канд. физ.-мат. наук

ÓСалаватский филиал УГНТУ, 2011

Сортировка

Под сортировкой понимают процесс перестановки объектов данного множества в определенномпорядке. Цель сортировки - облегчить последующий поиск элементов в отсортированном множестве. В этом смысле элементы сортировки присутствуют во многих задачах прикладного программирования.

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

Алгоритмы сортировки можно разбить на следующие группы

Обычно сортируемые элементы множества называют записями и обозначают через кх, к2, ...,кп.

Пусть есть последовательность a0,a1...anи функция сравнения, которая на любых двух элементах последовательности принимает одно из трех значений: меньше, больше или равно. Задача сортировки состоит в перестановке членов последовательности таким образом, чтобы выполнялось условие:ai<=ai+1, для всехiот 0 доn.

Если значение функции сравнения зависит только от поля x, тоxназывают ключом, по которому производится сортировка. На практике, в качествеxчасто выступает число, а полеyхранит какие-либо данные, никак не влияющие на работу алгоритма.

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

Для того, чтобы обоснованно сделать такой выбор, рассмотрим параметры, по которым будет производиться оценка алгоритмов.

Время сортировки - основной параметр, характеризующий быстродействие алгоритма.

Память - ряд алгоритмов требует выделения дополнительной памяти под временное хранение данных. При оценке используемой памяти не будет учитываться место, которое занимает исходный массив и независящие от входной последовательности затраты, например, на хранение кода программы.

Устойчивость - устойчивая сортировка не меняет взаимного расположения равных элементов.

Естественность поведения - эффективность метода при обработке уже отсортированных, или частично отсортированных данных. Алгоритм ведет себя естественно, если учитывает эту характеристику входной последовательности и работает лучше.

Еще одним важным свойством алгоритма является его сфера применения. Здесь основных позиций две:

  • внутренние сортировки работают с данным в оперативной памяти с произвольным доступом;

  • внешние сортировки упорядочивают информацию, расположенную на внешних носителях. Это накладывает некоторые дополнительные ограничения на алгоритм:

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

  • объем данных не позволяет им разместиться в ОЗУ

Кроме того, доступ к данным на носителе производится намного медленнее, чем операции с оперативной памятью.

Данный класс алгоритмов делится на два основных подкласса:

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

Внешняя сортировка оперирует с запоминающими устройствами большого объема, но с доступом не произвольным, а последовательным (сортировка файлов), т.е в данный момент мы 'видим' только один элемент, а затраты на перемотку по сравнению с памятью неоправданно велики . Это приводит к специальным методам сортировки, обычно использующим дополнительное дисковое пространство.

Сортировка выбором

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

Например, требуется найти минимальный элемент списка:

{5, 11,6,4,9,2, 15,7}.

Процесс выбора показан на рис, где в каждой строчке выписаны сравниваемые пары. Выбираемые элементы с мень­шим весом обведены кружком. Нетрудно видеть, что число сравнений соответствует на рисунке числу строк, а число перемещений — количеству изменений выбранного элемента.

{5, 11, 6, 4, 9, 2, 15, 7}

Сортировка выбором

Выбранный в исходном списке минимальный элемент размещается на предназначенном ему месте несколькими способами:

• минимальный элемент после i-го просмотра перемещается наi-e место нового списка(i=1, 2, ...,п), а в исходном списке на место выбранного элемента записывается ка­кое-то очень большое число, превосходящее по величине любой элемент списка, при этом длина заданного списка остается постоянной. Измененный таким образом список можно принимать за исходный;

  • минимальный элемент записывается на i-е место исходного списка (i= 1, 2, ....,п), а элемент сi-го места — на место выбранного. При этом очевидно, что уже упорядоченные элементы (а они будут расположены начиная с первого места) исключаются из дальнейшей сортировки, поэтому длина каждого последующего списка (списка, участвующего в каждом последующем просмотре) должна быть на один элемент меньше предыдущего;

  • выбранный минимальный элемент, как и в предыдущем случае, перемещается на i-е место заданного списка, а чтобы этоi-е место освободилось для записи очередного минимального элемента, левая от выбранного элемента часть списка перемещается вправо на одну позицию так, чтобы заполнилосьместо, занимаемое до этого выбранным элементом (элементы списка циклически сдвигаются).

Сложность метода сортировки выбором порядка составляет 0(п2).

Сортировка вставкой

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

Сортировку вставкой рассмотрим на примере заданной неупорядоченной последовательности элементов:

{40, 11, 83, 57, 32, 21, 75, 64}.

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

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

На втором этапе из неупорядоченной последовательности выбирается элемент и сравнивается с двумя упорядоченными ранее элементами. Так как он больше предыдущих, то остается на месте. Затем анализируются четвертый, пятый и последующие элементы — до тех пор, пока весь список не будет упорядоченным, что имеет место на последнем (седьмом) этапе.

Cортировка вставкой

Сортировка слиянием

Разновидностью сортировки вставкой является метод фон Неймана.

Алгоритм решения этой задачи, известный как «сортировка фон Неймана» или сортировка слиянием, состоит в следующем: сначала анализируются первые элементы обоих массивов. Меньший элемент переписывается в новый массив. Оставшийся элемент последовательно сравнивается с элементами из другого массива. В новый массив после каждого сравнения попадает меньший элемент. Процесс продолжается до исчерпания элементов одного из массивов. Затем остаток другого массива допиcывается в новый массив. Полученный новый массив упорядочен таким же образом, как исходные.

Пусть имеются два отсортированных в порядке возрастания массива р[1], р[2], ..., р[п] и q[l], q[2], ..., q[n] и имеется пустой массивr[1],r[2], ...,r[2п], который необходимо заполнить значениями массивовр иq в порядке возрастания. Для слияния выполняются следующие действия: сравниваютсяр[1] иq[1], и меньшее из значений записывается в г[1]. Предположим, что этозначение р[1]. Тогда р[2] сравнивается с q[1] и меньшее из значений заносится вr[2]. Предположим, что это значениеq[1]. Тогда на следующем шаге сравниваются значенияр[2] иq[2] и т. д., пока не достигнута граница одного из массивов. Тогда остаток другого массива просто дописывается в «хвост» массиваr.

Пример слияния двух массивов показан на рис.

Сложность метода сортировки вставкой порядка 0(п2).

Сортировка вставкой

Сортировка обменом

Сортировка обменом — метод, в котором элементы списка последовательно сравниваются между собой и меняются места­ми в том случае, если предшествующий элемент больше после­дующего.

Требуется, например, провести сортировку списка методом стандартного обмена или методом «пузырька»:

{40, 11, 83, 57, 32, 21, 75,64}.

Обозначим квадратными скобками со стрелками tt обмениваемые элементы, а II — сравниваемые элементы. Первый этап сортировки показан на рис

Нетрудно видеть, что после каждого просмотра списка все элементы, начиная с последнего, занимают свои окончательные позиции, поэтому их не следует проверять при следующих просмотрах. Каждый последующий просмотр исключает очередную

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

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

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

Второй просмотр выявляет максимальный элемент, рав­ный 75 .

Процесс сортировки продолжается до тех пор, пока не будут сформированы все элементы конечного списка либо не выпол­нится условие Айверсона.

Условие Айверсона: если в ходе сортировки при сравнении элементов не было сделано ни одной перестановки, то множест­во считается упорядоченным (условие Айверсона выполняется только при шагеd = 1).

Шейкерная сортировка

Модификацией сортировки стандартным обменом является шейкерная или челночная сортировка. Здесь, как и в методе пу­зырька, проводится попарное сравнение элементов. При этом первый проход осуществляется слева направо, второй — справа налево и т. д. Иными словами, меняется направление просмотра элементов списка.

Сложность метода стандартного обмена — 0(n2).

Соседние файлы в папке Algoritmizatsia_i_programmirovanie