Сортировка с помощью прямого обмена

Сортировка с помощью прямого выбора

Сортировка массива размером n в неубывающем (невозрастающем) порядке методом прямого выбора выполняется по следующему алгоритму.

1. Выбирается элемент данного массива с минимальным (максимальным) значением (или ключом).

2. Выбранный элемент и первый элемент меняются местами.

3. Этот процесс повторяется с оставшимися n - 1 элементами, затем с n - 2 элементами и т.д. до тех пор, пока не останется один, самый большой (меньший) элемент.

Всего потребуется n - 1 раз выполнить указанную последовательность действий. В процессе сортировки будет увеличиваться отсортированная часть массива, а неотсортированная соответственно уменьшаться.

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

Напомним, что во всех рассматриваемых методах сортировки мы не используем промежуточных массивов.

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

Исходный массив: -14 -5 -15*
1-й шаг -15 -14* -5
2-й шаг: -15 -14 -5*
3-й шаг: -15 -14 -5 0*
4-й шаг: -15 -14 -5 6*
5-й шаг: -15 -14 -5 6*
6-й шаг: -15 -14 -5 13*
7-й шаг: -15 -14 -5 18*
8-й шаг: -15 -14 -5 22*
9-й шаг: -15 -14 -5 28*
10-й шаг: -15 -14 -5 35
11-й шаг: -15 -14 -5

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

Пусть задан массив a размером n. Начинаем просмотр массива с первой пары элементов a[1] и a[2]. Если первый элемент этой пары больше второго, то меняем их местами, иначе оставляем их без изменения и сравниваем вторую пару элементов а[2] и а[3]. Если а|2] > а[3], то меняем их местами и т.д. На первом шаге будут просмотрены все пары элементов массива: а[i] и а[i+1] для i от 1 до n -1. В результате такого просмотра и необходимых обменов максимальный элемент переместится в конец массива и будет являться отсортированной частью. На втором шаге аналогичная процедура проводится с первого до (n - 1)-гo элемента. Тем самым второй по величине элемент массива переместится на предпоследнее место. Отсортированная часть будет содержать два элемента. Эти действия продолжаются до тех пор, пока количество элементов в неотсортированной части массива не уменьшится до двух.Нaпоследнем шаге выполняется упорядочение оставшихся двух элементов. После (n - 1) шагов массив окажется отсортированным по неубыванию.Для иллюстрации отсортируем массив по неубыванию методом простого обмена. Отсортированная часть выделена полужирным шрифтом.

 

Исходный массив: -14 -5 -15
1-й шаг -14 -5 -15
2-й шаг: -14 -5 -15
3-й шаг: -14 -5 -15
4-й шаг: -14 -5 -15
5-й шаг: -14 -5 -15
6-й шаг: -14 -5 -15
7-й шаг: -14 -5 -15
8-й шаг: -14 -5 -15
9-й шаг: -14 -5 -15
10-й шаг: -14 -15 -5
11-й шаг: -15 -14 -5

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


Лабораторная работа № 9
Задачи сортировки и поиска

ЦЕЛЬ РАБОТЫ: Закрепление теоретических знаний и приобретение практических навыков по составлению алгоритмов и программ различных методов сортировки.

Выполнение работы:

1. Сформировать при помощи генератора псевдослучайных чисел линейный целочисленный массив A[20], таким образом, что бы элементы массива принадлежали отрезку [-50, 50].

2. Выполнить в нём линейный поиск заданного элемента.

3. Отсортировать массив определённым методом в соответствии с вариантом (см. таблицу).

4. Выполнить бинарный поиск элемента.