Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа 2-8 сортировка

.pdf
Скачиваний:
37
Добавлен:
25.03.2016
Размер:
274.24 Кб
Скачать

В литературе сортировка Флойда часто называется пирамидальной, а упорядоченное двоичное дерево – пирамидой.

2.5. Быстрая сортировка (Quick Sort).

Данный алгоритм можно организовать и как рекурсивный, и как итерационный.

Основная идея: Разбить исходный массив на два (все большие элементы справа), каждый из подмассивов разделить снова на два и т.д. до тех пор пока в подмассиве не останется один элемент.

a ,a

2

,,

ai ,

,a

n1

,a

n

1

 

 

 

 

 

все

меньшие

Фиксируем

все большие

 

 

 

 

 

 

 

Стратегия выбора:

1.Выбрать первый элемент ( m = A(1) – большая глубина рекурсии);

2.Выбрать среднее арифметическое всех элементов ( m = iN=0 Ai – необ-

ходимо вставить в алгоритм сумму);

3.Выбрать три элемента из начала, середины и конца и посчитать их среднее арифметическое (более простой алгоритм суммирования);

4.Выбрать случайным образом;

5.Выбрать элемент из середины массива m = Ak , k = N 2 (Реализуется в

сортировке слиянием).

Public Sub QuickSort (A() As Integer, ByVal min As Integer, ByVal max As Integer) As Integer

Dim m, L, H As Integer

If min >= max Then Exit Sub m = A(min)

L = min H = max

Do ‘просматриваем от верхней границы массива до разделителя

11

Do While A(H) >= m H = H-1

If H <= L Then Exit Do Loop

If H <= L Then A(L) = m Exit Do

End If

A(L) = A(H)

L = L + 1

Do While A(L) < m L = L + 1

If L >= H Then Exit Sub Loop

If L >= H Then L = H A(H) = m Exit Do

End If A(H)=A(L) Loop

QuickSort A(), min, L-1 QuickSort A(), L+1, max

End Sub

Неудобства 1). Если первый элемент минимален, то программа работает в пустую.

2). Уровень вложенности рекурсии будет очень большим.

3). Если элементов массива много (N), а диапазон их значений достаточно узок (много повторяющихся элементов), при использовании данного метода сложность будет равна ON 2 .

Вывод: Быстрая сортировка не самый лучший алгоритм для сортировки небольших массивов.

12

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

Практическое задание:

1. Выполните приведенные ниже задания.

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

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

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

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

5.Написать программу сортировки методом прямого включения. Оценить количество сравнений ключа и количество перестановок и сравнить эти значения с теоретическими оценками.

6.Написать программу сортировки методом двоичного включения. Оценить количество сравнений ключа и количество перестановок и сравнить эти значения с теоретическими оценками.

2. Выполнить один вариант домашнего задания.

13

1.Написать программу с помощью метода быстрой сортировки. Выбирать в качестве m – первый элемент массива. Оценить глубину рекурсии, количество сравнений ключа и количество перестановок.

2.Написать программу с помощью метода быстрой сортировки. Выбирать в качестве m – среднее арифметическое всех элементов массива. Оценить глубину рекурсии, количество сравнений ключа и количество перестановок.

3.Написать программу с помощью метода быстрой сортировки. Выбирать в качестве m – среднее арифметическое чисел (первый элемент массива + элемент из середины массива + последний элемент массива). Оценить глубину рекурсии, количество сравнений ключа и количество перестановок.

4.Написать программу с помощью метода быстрой сортировки. Выбирать

вкачестве m – случайный элемент массива. Оценить глубину рекурсии, количество сравнений ключа и количество перестановок.

5.Написать программу с помощью метода быстрой сортировки. Выбирать

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

6.Написать программу методом всплытия Флойда. Оценить количество сравнений ключа и количество перестановок.

14

3. Контрольные вопросы

1.Дайте определение сортировки.

2.В чем заключается цель сортировки?

3.От чего зависит выбор алгоритма сортировки? Какие алгоритмы сортировки при этом можно выделить?

4.Сформулируйте задачу сортировки.

5.Что представляет собой ключ для каждого элемента?

6.Дайте определение адресной сортировки.

7.Назовите три основные группы методов сортировки и кратко охарактеризуйте их.

8.При каком условии метод сортировки является устойчивым?

9.Дайте определение двоичного дерева.

10.Дайте определение частично упорядоченного дерева.

11.Охарактеризуйте сложности процедуры всплытия.

12.Нарисуйте схематически процедуру всплытия.

13.Нарисуйте блок-схему алгоритма прямого выбора. Опишите принципы на которых она основана. Напишите формулу для числа сравнений ключа и количества перестановок.

14.Опишите метод пузырька и нарисуйте его блок-схему. К какому типу методов он основан. Графически изобразите алгоритм пузырьковой сортировки.

15.Шейкерная сортировка (блок-схема).

16.Метод прямого включения (описание алгоритма, блок-схема, достоинства и недостатки).

17.Двоичное включение (описание алгоритма, блок-схема, достоинства и недостатки).

18.Сортировка Флойда (описание алгоритма, блок-схема, графическая интерпретация, достоинства и недостатки).

19.Быстрая сортировка (основная идея, стратегия выбора, описание алгоритма, блок-схема, достоинства и недостатки).

15