procedure Shell(var a: Mas; n: integer); { сортировка методом Шелла } var i, j, step, t: integer;
begin step := n div 2; while step > 0 do begin for j := n - step downto 1 do begin i := j; while i <= n - step do begin if a[i] > a[i + step] then begin t := a[i]; a[i] := a[i + 1]; a[i + 1] := t end; i := i + step end end; step := step div 2 end end;
var x: Mas; i, n: integer;
begin Randomize; Write('Введите число элементов в массиве (1-100): '); Readln(n); Writeln('Исходный массив'); for i := 1 to n do begin x[i] := Random(101) - 50; Write(x[i]:4) end; Shell(x, n); Writeln(#13#10, 'Отсортированный массив'); for i := 1 to n do Write(x[i]:4) end.
nm = 100;
type
Mas = array[1..nm] of integer;
procedure Shell(var a: Mas; n: integer);
{ сортировка методом Шелла }
var
i, j, step, t: integer;
begin
step := n div 2;
while step > 0 do
begin
for j := n - step downto 1 do
begin
i := j;
while i <= n - step do
begin
if a[i] > a[i + step] then
begin
t := a[i];
a[i] := a[i + 1];
a[i + 1] := t
end;
i := i + step
end
end;
step := step div 2
end
end;
var
x: Mas;
i, n: integer;
begin
Randomize;
Write('Введите число элементов в массиве (1-100): ');
Readln(n);
Writeln('Исходный массив');
for i := 1 to n do
begin
x[i] := Random(101) - 50;
Write(x[i]:4)
end;
Shell(x, n);
Writeln(#13#10, 'Отсортированный массив');
for i := 1 to n do Write(x[i]:4)
end.
Тестовое решение:
Введите число элементов в массиве (1-100): 20
Исходный массив
-8 -17 -19 1 -3 23 -33 30 -27 -45 12 26 -24 18 37 8 47 -14 -19 -3
Отсортированный массив
-45 -33 -27 -24 -19 -19 -17 -14 -8 -3 -3 1 8 12 18 23 26 30 37 47