Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгор_ТХТК_пособие.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.6 Mб
Скачать

Обменная сортировка

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

Просмор пар может начинаться с начала массива или с его конца, в последнем случае алгоритм называют алгоритмом пузырьковой сортировки. Подробнее об этом можно ознакомиться в [2,3].

Пример 5.17 Программа обменной сортировки

Uses crt;

Var m:array[1..1000] of integer;

I,z,n:integer; Key:byte;

Begin Clrscr;

{Ввод n и формирование массива М как в предыдущей программе}

Repeat

Key:=0;

For i:=1 to n-1 do

If M[i] > M[i+1] then

begin

Z:=M[i];

M[i]:=M[i+1];

M[i+1]:=Z;

Key:=1;

end;

Until Key=0;

Writeln(' Упорядоченный массив');

For i:=1 to n do write(M[i],' '); readkey;

End.

Сортировка слиянием

Алгоритм сортировки слиянием используется в тех случаях, когда данные расположены на внешних носителях информации или сортируется данные очень большого объема, которые невозможно расположить в оперативной памяти целиком. В этом случае данные могут быть сохранены, например, в отдельных файлах, таких размеров, которые могут быть помещены в оперативную память, например в массивы. Производится загрузка данных из файлов в массивы и сортировка данных каждого из массивов отдельно. Упорядоченные данные снова записываются в файлы. Затем производится сортировка слиянием уже упорядоченных данных, расположенных в отдельных файлах.

Поскольку мы пока не знакомы с работой с файлами в ТР, рассмотрим алгоритм сортировки слиянием на примере слияния двух предварительно упорядоченных массивов Х и Y в один массив Z. Данные в массивах расположены в порядке возрастания их значений.

Обзначим через переменные dx, dy - длину (размер) массивов X, Y соответственно. Переменные ix, iy - счетчики (адреса) тех же массивов. Переменная iz - счетчик числа элементов нового массива Z.

Пример 5.18 Программа сортировки слиянием

Uses crt;

Var { Описание массивов и переменных}

X, y: array[1..1000] of integer;

Z: array[1..2000] of integer;

dx,dy,ix,iy,iz,i:integer;

Begin Clrscr; { Ввод данных}

Write(' Введите длину массива Х '); readln(dx);

Writeln(' Введите упорядоченный по возрастанию массив Х');

For i:=1 to dx do read(X[i]); readln;

Write(' Введите длину массива Y '); readln(dy);

Writeln(' Введите упорядоченный по возрастанию массив Y');

For i:=1 to dy do read(Y[i]); readln;

ix:=1; iy:=1; iz:=0;

While (ix<=dx) and (iy<=dy) do

if X[ix]<Y[iy] then

begin {Перезапись значения из массива Х в массив Z}

inc(iz); Z[iz]:=X[ix]; inc(ix);

end

else

begin {Перзапись значения из массива Y в массив Z}

inc(iz); Z[iz]:=Y[iy]; inc(iy);

end;

{ Один из массивов полностью переписан }

if ix>dx then { Переписан массив Х, дописываем все оставшееся из Y}

for i:=iy to dy do

begin

inc(iz); Z[iz]:=Y[i];

end

else { Переписан массив Y, дописываем все оставшееся из X }

for i:=ix to dx do

begin

inc(iz); Z[iz]:=X[i];

end;

{ Вывод результата слияния на экран}

writeln(' Полученный массив Z');

for i:=1 to iz do write(Z[i],' '); readln;

End.