|
Сортировка массива II
Задача:
Сортировка массива 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.
|
|
|
|