Итог: 1 2 4 5 7 8 9 10 13 16

 

 

Для программной реализации этого процесса необходимо организовать цикл по длине рассматриваемой части массива, которая изменяется от n до 2. В качестве начального значения максимума разумно взять значение последнего элемента рассматриваемой части.

Теперь можем записать алгоритм сортировки:

For i: = n Downto 2 Do

Begin

найти максимальный элемент из a[1], ..., a[i]; запомнить его индекс в переменной

k; если i<>k поменять местами a[i] и a[k]

End;

 

Опишем этот алгоритм подробно:

 

program n1;

type ar=array [1..10] of integer;

var i:integer;

a:ar;

 

Procedure sorting1(var a:ar);

{поскольку в процессе работы процедуры массив изменится, формальный

параметр а описывается как параметр-переменная}

var i,j,k:integer;

m:integer;

{значение максимального элемента рассматриваемой части массива}

begin

for i:=10 downto 2 do

{цикл по длине рассматриваемой части массива}

begin

{поиск максимального элемента и его номера в текущей части массива}

k:=i;

m:=a[i];

{начальные значения максимального элемента и

его индекса в рассматриваемой части массива}

for j:=2 to i-1 do

if a[j]>m then begin k:=j; m:=a[k] end;

if k<>i then

begin {перестановка элементов}

a[k]:=a[i];

a[i]:=m;

end;

end;

end;

begin

writeln('Введите исходный массив:');

for i:=1 to 10 do read(a[i]);

sorting1(a);

writeln('Отсортированный массив:');

for i:=1 to 10 do write(a[i],' ');

writeln;

end.

 

 

При решении практических задач упорядочивание x1,...xn как правило сопровождается некоторыми дополнительными действиями. Например, если x1, y1, x2, y2, ..., xn, yn - это значения аргумента x и некоторой функций y=f(x), то перестановка x1, ..., xn должна сопровождаться перестановкой y1, ..., yn. Элементы y1, ..., yn переставляются так же, как x1, ..., xn вне зависимости от значений самих

y1, ..., yn. Рассмотрим эту задачу; переставленные значения x1, y1, x2, y2, ..., xn будут выведены в два столбца:

x1 y1

x2 y2

.....

xn yn

program tab;

const n=5;

type u=array[1..n] of real;

var x,y:u;

v:real;

i,j,k:integer;

begin

for i:=1 to n do read(x[i],y[i]);

for i:=1 to n do begin

k:=i;

for j:=i+1 to n do

if x[j]<x[k] then k:=j;

v:=x[i]; x[i]:=x[k]; x[k]:=v;

v:=y[i]; y[i]:=y[k]; y[k]:=v;

writeln(x[i],y[i]);

end;

end.