39. Организация вложенных циклов. Сортировка элементов массива методом вставки.
Организация вложенных циклов.
Иногда цикл, называемый в данном случае внешним, может содержать в себе один или несколько внутренних, образуя так называемые вложенные циклы. Каждый из вложенных циклов, в свою очередь, может содержать вложенные в него циклы. Как внешние, так и внутренние циклы организуются по общим правилам организации циклических алгоритмов. Переменные внешнего и внутреннего цикла должны быть разными и изменяться таким образом, чтобы для каждого значения переменной внешнего цикла переменная внутреннего цикла приняла все оговоренные в цикле значения. При организации вложенных циклов необходимо строго следить за тем, чтобы цикл, начинающийся позже, заканчивался раньше. При этом передача управления "вовнутрь" цикла запрещена. Выход из цикла возможен после его естественного завершения или досрочно, например в результате проверки некоторого условия.
Сортировка элементов массива методом вставки.
Сортировку вставками можно описать следующим образом. В исходном состоянии считают, что сортируемая последовательность состоит из двух последовательностей: уже сортированной (она на первом шаге состоит из единственного - первого элемента) и последовательности элементов, которые еще необходимо сортировать. На каждом шаге из сортируемой последовательности извлекается элемент и вставляется в первую последовательность так, чтобы она оставалась сортированной. Поиск места вставки осуществляют с конца, сравнивая вставляемый элемент аi с очередным элементом сортированной последовательности аj. Если элемент ai больше аj, его вставляют вместо aj+1, иначе сдвигают аj вправо и уменьшают j на единицу. Поиск места вставки завершают, если элемент вставлен или достигнут левый конец массива. В последнем случае элемент ai вставляют на первое место.
По возрастанию:
program sort_voz_vstav;
{$APPTYPE CONSOLE}
uses
SysUtils,
Math;
const nn=20;
var a:array[1..nn] of real;
b:real;
n,i,j:integer;
begin
writeln('Vvedite kolichestvo elementov');
readln(n);
writeln('Vvedite elementi massiva');
for i:=1 to n do
read(a[i]);
readln;
for i:=1 to n-1 do
begin
j:=i+1;
while (j>=2)and (a[j]<a[j-1]) do
begin
b:=a[j];
a[j]:=a[j-1];
a[j-1]:=b;
j:=j-1;
end;
end;
for i:=1 to n do
write (a[i]:6:1,' ');
writeln;
readln;
end.
По убыванию:
program sort_yb_vstav;
{$APPTYPE CONSOLE}
uses
SysUtils,
Math;
const nn=20;
var a:array[1..nn] of real;
b:real;
n,i,j:integer;
begin
writeln('Vvedite kolichestvo elementov');
readln(n);
writeln('Vvedite elementi massiva');
for i:=1 to n do
read(a[i]);
readln;
for i:=1 to n-1 do
begin
j:=i+1;
while (j>=2)and (a[j]>a[j-1]) do
begin
b:=a[j];
a[j]:=a[j-1];
a[j-1]:=b;
j:=j-1;
end;
end;
for i:=1 to n do
write (a[i]:6:1,' ');
writeln;
readln;
end.