Сортировка массива меняя местами соседние элементы массива
Задача:
Сортировка массива c помощью рекурсивной функции, меняющей местами соседние элементы массива
Описание:
В функции, которая упорядочивает массив имеется флаг, который
сбрасывается, когда обнаруживается нарушение порядка. Затем производтся
перестановка элементов и флаг восстанавливается в истину. Далее, вызовом
этой же функции, проверяется следование всех элементов, и если все
упорядочено, то функция завершается.
Код:
program smass; {сортировка массива по возрастанию}
uses crt;
const N = 20; {размер массива}
var A:Array[1..N] of integer; {Массив чисел}
i, s: integer; {счетчики}
flag: boolean; {флаг}
Procedure SMass;
begin {пусть массив упорядочен}
flag:= true; {установка флага в истину}
for i:= 1 to N - 1 do {проверка массива--}
if A[i] > A[i+1] then begin {если i-ый элемент больше (i+1)-го, то}
s:= A[i]; {меняем их местами}
A[i]:= A[i+1];
A[i+1]:= s;
flag:= false; {и флаг ставим в ложь, так как}
end; {порядок был нарушен}
{если были проведены перестановки, то заново проверяем массив, рекурсивно}
if flag = false then SMass; {вызывая эту же процедуру}
end;
Begin
clrscr; {очистка экрана}
Randomize;
for i:= 1 to N do begin {задание массива случайными числами}
A[i]:=Random(100); {--}
Write(A[i], ' '); {вывод на экран}
end;
SMass; {вызов процедуры}
Writeln;
Writeln;
for i:= 1 to N do {вывод упорядоченного массива}
Write(A[i], ' '); {--}
readln;
End.