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

Чет про программирование / практика / 10) Сортировка слиянием

.docx
Скачиваний:
22
Добавлен:
25.04.2015
Размер:
14.06 Кб
Скачать

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

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.