Сортировка массива 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.



Hosted by uCoz