Чет про программирование / практика / 10) Сортировка слиянием
.docxСортировка слиянием
type
massiv = array[1..100] of integer;
var
n, i: integer;
A: massiv;
procedure Merge(var A: massiv; first, last: integer); //процедура сливающая массивы ***}
var
middle, start, final, j: integer;
mas: massiv;
begin
middle := (first + last) div 2; //находим средний элемент
start := first; //начало левой части}
final := middle + 1; //начало правой части
for j := first to last do //от начала до конца
if (start <= middle) and ((final > last) or (A[start] < A[final])) then begin
mas[j] := A[start];
inc(start);
end else begin
mas[j]:=A[final];
inc(final);
end;
for j:=first to last do
A[j] := mas[j]; //возвращение результата в список
end;
{*** рекурсивная процедура сортировки ***}
procedure MergeSort(var A: massiv; first, last: integer);
begin
if first < last then begin
MergeSort(A, first, (first + last) div 2); {сортируем левую часть}
MergeSort(A, (first+last) div 2 + 1, last); {сортируем правую часть}
Merge(A, first, last); {сливаем две части}
end;
end;
{*** начало основной программы ***}
begin
randomize;
write('Размер массива > ');
readln(n);
writeln('Исходный массив:');
for i:=1 to n do begin
A[i]:=random(10);
write(A[i], ' ');
end;
writeln;
MergeSort(A, 1, n); //вызов сортирующей процедуры
writeln('Результат сортировки:'); //вывод отсортированного массива
for i:=1 to n do write(A[i],' ');
readln;
end.