- •1.1. Понятие множества и способы его задания
- •1.2. Подмножества
- •1.3. Операции над множествами
- •1.4. Свойства операций над множествами
- •4.1. Понятие сортиравки
- •4.2. Пузырьковая сортировка
- •4.3. Сортировка выбором
- •I,j,k,t :integer; flag :boolean;
- •5.1. Cортировка вставками
- •5.2. Метод Шелла
- •6.1. Квадратичная выборка
- •6.2. Быстрая сортировка
- •7.1. Основные определения
- •7.2. Способы задания бинарных отношений
- •7.3. Операции над бинарными отношениями
- •8.2. Отношение эквивалентности
- •8.3. Отношение порядка
- •8.3.2. Диаграмма Хассе
- •8.4. Мощность множеств
6.1. Квадратичная выборка
Квадратичная выборка по сравнению с сортировкой выбором имеет
меньшее число сравнений элементов, однако требует дополнительного
объема памяти.
Сущность метода квадратичной выборки состоит в том, что исходный
массив А из п элементов разделяется на т групп A , A ,, A по n
элементов в каждой. Если п не является точным квадратом, то массив разделяется на mгрупп, где mесть ближайший квадрат, больший п.
На первой итерации из каждой группы выбирается наименьший элемент,
которыйпересылается во вспомогательный массив В, вмещающий т элементов. В
этом массиве находится наименьший элемент, который присоединяется к
отсортированным элементам в результирующем массиве. Массив В
пополняется наименьшим элементом из той группы, которой принадлежал
элемент, отправленный в результирующий массив. На этом итерация
завершается. Затем снова находится наименьший элемент в массиве В и т.д. В
каждой группе выбранный элемент заменяется большими фиктивными
величинами.
Работа заканчивается, когда все группы будут заполнены фиктивными
величинами.
Пример 6.1.1. Квадратичной выборкой упорядочить массив
А = {8,4,6,3,7,2, 1,5}.
Исходный массив разбивается на три группы элементов:
A = {8, 4, 6}, A = {3, 7, 2}, A = {1, 5}.
Формируем вспомогательный массив, выбирая по наименьшему
элементу из каждой группы
В= {4, 2, 1}.
Находим наименьший элемент 1 из вспомогательного массива и
m
2
1
3
2
1
Далее изменения вспомогательного массива будут иметь следующийвид
{4, 2, 5}выбран элемент 2
{4,3, 5} выбран элемент 3
{4, 7, 5} выбран элемент 4
{6, 7, 5} выбран элемент 5
{6, 7, f} выбран элемент 6
{8, 7, f} выбран элемент 7
{8, f, f} выбран элемент 8
{f, f, f} псе элементы фиктивные, конец.
Так как на всех итерациях выбор наименьшего элемента производится
только из одной группы, содержащей n элементов, то одна итерация метода
требует n сравнений. Учитывая, что для выбора элемента во вспомогательном
массиве требуется т сравнений, получаем общее число сравнений на одной
итерации, равное n m. Всего выполняется п итераций, поэтому для
упорядочения массива квадратичной выборкой необходимо (в худшем случае) выполнить n mn сравнений. Так как m n/ n , то получаем n n n
сравненийвхудшемслучае.
6.2. Быстрая сортировка
Одним из методов сортировки массива чисел является «Быстрая
сортировка» (Quicksort). Сущность метода состоит в том, что на каж-
дой итерации выделяется часть массива чисел — рабочий массив — и для него находится главный (пороговый) элемент xA, распола-гающийся в рабочем массиве так, что каждое число в нем, распола-гающееся левее элемента x, меньше x, а каждое число, располагаю-щееся правей элемента x, больше x (см. рис. 4.1).
Рис. 4.1. Быстрая сортировка
Первоначально в качестве рабочего выбирается исходный массив, то есть устанавливаем границы рабочего массива l 1 и r n. В каче-стве главного выбирается элемент x, находящийся в середине масси-ва. Далее, начиная с i 1, последовательно увеличиваем значение i на единицу и сравниваем каждый элемент a c x, пока не будет найден
элемент a такой, что a x.
Затем, начиная с j r , последовательно уменьшаем значение. j на
единицу, пока не будет найден элемент aj такой, что x aj .
Если для найденных элементов a и aj выполняется условие i j, то
эти элементы в рабочем массиве меняются местами.
Ясно, что описанная процедура закончится нахождением главного
элемента и разделением массива на две части: одна часть будет содер-
жать элементы, меньшие x, а другая — большие x.
Далее для каждой такой части вновь применяется описанная выше
i
i
i
i
Паскаль-программа, реализующая данный алгоритм для 10-эле-
ментного массива, имеет вид
Program Q_sort; const
N=10; var
a:array[1..N] of integer; (* исходный массив *) k:integer;
procedure QuicksortA,r:integer); (* Процедура быстрой сортировки *) var i,j,x,y: integer;
begin
i:= 1; j:= r;
x:= a[(1 + r) div 2] ; repeat
while (a[i]<x) do inc(i); while (x<a[j]) do dec(j); if (i<=j) then
begin
y:=a[i]; a[i]:=a[j]; a[j]:=y; inc(i); dec(j);
end; until (i>j);
(* Рекурсивное использование процедуры Quicksort *) if (1<j) then Quicksort (1, j );
if (i<r) then Quicksort(i,r); end;
begin
writeln('Введите',N,'элементов массива:'); for k:=l to N do readln(a[k]); Quicksort(1,N);
(* на входе левая и правая граница сортировки *) writeln('После сортировки: ');
for k:=l to N do write(a[k],1 '); end.
Лекция 7
Бинарные отношения