- •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. Мощность множеств
4.1. Понятие сортиравки
Пусть имеется неупорядоченное множество A1, a2,,an , эле-
ментами которого являются (целые) числа. В некоторых приложениях
требуется упорядочить элементы множества A, например, в порядке
возрастания значений этих чисел. Такую операцию называют сорти-
ровкой, а множество A определяют как массив.
Элементы a (a[i]) рассматриваются обычно как содержимое ячейки
компьютера с номером i ( i 1, 2, ..., п).
В некоторых приложениях требуется упорядочить запись элементов в ячейках массива так, чтобы выполнялось соотношение aiaj, если
i j, где i, j—номера ячеек массива. В общем случае здесь символ
определяет отношение порядка, т.е. не обязательно отношение сравнения чисел.
Это могут быть слова в некотором алфавите или иное. Однако для упрощения
будем предполагать, что элементами массива являются целые числа.
Процедуру упорядочивания элементов массива называютсортировкой.
Строго говоря, рассматривая элементы множества A как массив, тем
самым устанавливают порядок рассмотрения элементов этого множества в
зависимости от номера ячейки, где они расположены. Тогда сущность
сортировки состоит в перезаписи элементов массива в соответствии с заданным отношением порядка .
a
i
необходимым для сортировки массива. Время сортировки напрямую зависит от
числа операций (сравнений, перезаписи элементов массива), которые
необходимо выполнить согласно принятому методу.
Отсортированный массив удобен для дальнейшего использования, так
как позволяет эффективно выполнять некоторые другие функции,
например вставку нового элемента в существующий отсортированный
массив.
4.2. Пузырьковая сортировка
Сущность пузырьковой сортировки состоит в следующем. Пусть
необходимо исходный массив чисел
a,a2,,an
расположить в неубывающем порядке, т.е. так, чтобы выполнялось условие aiaj, если i j.
Будем рассматривать элементы массива как вектор-столбец, в первой строке которого расположен элемент a, а в последней строке— элемент an
исходного массива.
Метод состоит в том, чтобы на каждой итерации метода наиболее
«легкий» (с меньшим значением) элемент оказался «выше» всех более
«тяжелых» элементов массива. Из такого представления и проистекает
название метода.
Каждая k -я итерация начинается с рассмотрения последнего, n-го
элемента массива. В общем случае, при рассмотрении i-го элемента массива, происходит его сравнение с i 1-м элементом. Если a ai, то
элементы массива меняются местами. В противном случае расположение
1
1
i1
самый «легкий» элемент, оказывается «наверху» рассматриваемой части
вектора-столбца.
Сортировка заканчивается, когда в процессе ее выполнения не будет ни
одной замены местами элементов массива.
Пример4.2.1. Пузырьковым методомотсортируем массивцелыхчисел
А = {8,4,6,3,7,2,1,5}.
Изменения исходного массива в процессе сортировки представлены в виде
последовательности вектор-строк, каждый из которых содержит результат
соответствующей итерации
{8,4,6,3,7,2,1,5} - исходный массив;
{1,8,4,6,3,7,2,5} - 1-я итерация;
{1,2,8,4,6,3,7,5} - 2-я итерация;
{1,2,3,8,4,6,5,7} - 3-я итерация;
{1,2,3,4,8,5,6,7} - 4-я итерация;
{1,2,3,4,5,8,6,7} - 5-я итерация;
{1,2,3,4,5,6,8,7} - 6-я итерация;
{1,2,3,4,5,6,7,8} - 7-я итерация.
Определим число операций, которые необходимо выполнить (в худшем
случае) для получения отсортированного массива.
На первой итерации требуется, очевидно, выполнить п 1 сравнений и, возможно, столько же перемен местами сравниваемых элементов. На второй итерации уже потребуется выполнить п 2 сравнений и столько же перемен местами элементов. Легко заметить, что на k -той итерации потребуется выполнить п k сравнений и столько же перемен местами
элементов. Значит, всего нужно выполнить n2 n операций.
Программа пузырьковой сортировки на Паскале имеет следующий вид
program Bubble;
(* пузырьковая сортировка *) Uses СRT;
Const n=8;
Var i,k,t:integer; flag:boolean;
A:array[1..n] of integer;
begin clrscr;
for i:=l to n do A[i]:=0;
writeln (‘Введите элементы массива’);
for i:=l to n do read(A[i]);
Writeln;
k:=l; (* номер итерации *) repeat
flag:=true;
Writeln(k,'-тая итерация:'); for i:=n downto k+1 do
if A[i] < A[i-l] then begin
flag:=false; t:=A[i];
A[i-1]:=t; end;
for i:=l to n do
Write(A[i],’ ‘); Writeln;
k:=k+l; until((k=n)or flag); end.