Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
S-TEZISY.DOC
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.42 Mб
Скачать

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

Пусть имеется массив a1, a2,… ai-1,ai, … an . Его надо отсортировать в порядке возрастания.

  1. Предположим, что a1, a2,… ai-1 уже отсортированы. Выбираем ai и двигаемся налево. Находим место, куда надо вставить ai. Сдвигаем все элементы с этого места до ai-1 включительно на один элемент вправо. На освободившееся место ставим ai. Таким образом, будут отсортированы уже a1, a2,… ai-1, ai элементы.

  2. Процесс повторяем до тех пор, пока не будут отсортированы все элементы.

Сортировка с помощью двоичного включения.

Сортировку с помощью прямого включения можно улучшить, если учитывать, что элементы a1, a2,… ai-1 уже упорядочены. Поиск места включения можно осуществлять с помощью “поиска делением пополам”.

Сортировка двумерных массивов

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

Лекция 6.

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

Здесь рассматриваются:

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

  • Сортировка двумерных массивов пузырьковым методом.

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

Сортировка массива с помощью прямого выбора основана на следующих принципах:

1. Выбирается элемент с наименьшим ключом

2. Он меняется местами с первым элементом a[1]

3. Затем этот процесс повторяется с оставшимися n-1 элементами,

n-2 элементами, и так далее.

Сортировка массива с помощью прямого обмена (упорядочивание по возрастанию):

  1. Сравниваем первый и второй элементы. Если первый элемент больше, то меняем элементы местами. Далее сравниваем второй и третий элементы. Если второй элемент больше третьего, то меняем элементы местами. И так далее до конца массива. В результате на последнем месте будет стоять наибольший элемент.

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

  3. И так далее…

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

Лекция 7.

Улучшенные методы сортировки. Сортировка с помощью разделения – быстрая сортировка (QuickSort).

. Имеется несколько улучшенных методов сортировки, основанных на принципах включения, выбора и обмена. Пузырьковая (принципы обмена) сортировка была самой неэффективной из трех рассмотренных методов. Улучшенный метод пузырьковой сортировки приводит к самому лучшему из известных в данный момент методов сортировки. Этот метод называется быстрой сортировкой (QuickSort).

В этом методе используется принцип разделения:

  1. Выбираем наугад из массива a какой-нибудь элемент x. Будем просматривать слева массив a до тех пор, пока не обнаружим элемент ai > x.

  2. Затем будем просматривать массив a справа, пока не встретим aj < x.

  3. Поменяем местами эти два элемента. Продолжим процесс просмотра и обмена, пока оба просмотра не встретятся где-то в середине массива.

  4. В результате массив окажется разбитым на две части:

    • левую часть с ключами меньше или равными x

    • правую часть с ключами больше или равными x

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

Пример.

Рассмотрим один проход сортировки с помощью разделения

Лучше начинать сортировку, взяв элемент x в середине массива. Здесь

в качестве x выбран четвертый элемент массива (42). Меняются местами 44 и 18, 55 и 06.

исходный массив

44 55 12 42 94 06 18 67

результат одного прохода сортировки с помощью разделения

18 06 12 42 94 55 44 67

В директории block7 находится пример программы, выполняющей быструю сортировку (QuickSort) с помощью разделения. В программе дается два варианта:

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

  • во втором варианте написана подобная процедура, но заменяющая рекурсию на итеративные шаги.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]