Алгоритм сортировки вставкой(другой нельзя) у меня есть, он подходит для одномерных массивом, поэтому я записал двумерный массив в одномерный, затем обратно. Алгоритм нахождения второго максимального элемента я взял с интернета, он иногда почему-то находит два одинаковых максимальных элемента.
Суть проблемы в том, что я не могу соединить два этих алгоритма. Массив сортируется, а как его отсортировать, начиная со второго максимального элемента я не пойму.
Вот набросок программы:
Program InsSort;
Const n = 60;
m = 6;
Var A : array[1..n] of Integer;
inputArray : array[1..m,1..m] of integer;
k : Integer; l, r, i, j : Integer; b : Integer; p,v:integer;
max1,max2:integer;
Begin
{Блок чтения массива A}
writeln('исходная матрица');
randomize;
for p:=1 to m do //random
begin
for v:=1 to m do
begin
inputArray[p,v]:=random(50);
write(inputArray[p,v]:3)
end;
writeln;
end;
k:=1;
for p:=1 to m do //a = iA
begin
for v:=1 to m do
begin
A[k]:=inputArray[p,v];
inc (k);
end;
end;
max1 := 1;
for k:=2 to n do
if a[k] > a[max1] then
max1 := k;
if max1=1 then
max2 := 2
else
max2 := 1;
for k:=2 to N do
if k <> max1 then // чтобы пропустить max1
if a[k] > a[max2] then
max2 := k;
writeln(max1,' ', a[max1]);
writeln(max2,' ', a[max2]);
{непосредсвенно алгоритм сортировки}
For k :=1 to n-1 do
begin
b := A[k+1];
If b > A[k] then
begin
l := 1; r := k; {Бинарный поиск}
Repeat
j := (l + r) div 2;
If b > A[j] then
r := j else
l := j + 1;
until (l = j);{ Сдвиг “хвоста” массива на 1 позицию вправо}
For i := k downto j do A[i+1] := A[i];
A[j] := b ; { Пересылка элемента на свое место}
end
end; {Блок вывода массива A}
writeln('конечная матрица');
k:=1;
for p:=1 to m do //a = iA
begin
for v:=1 to m do
begin
inputArray[p,v]:=A[k];
write(inputArray[p,v]:3);
inc (k);
end;
writeln;
end;
End.
Прошу помощи!