В двумерном массиве отсортировать элементы, которые расположены после второго максимального элемента по убыванию.
Алгоритм сортировки вставкой(другой нельзя) у меня есть, он подходит для одномерных массивом, поэтому я записал двумерный массив в одномерный, затем обратно. Алгоритм нахождения второго максимального элемента я взял с интернета, он иногда почему-то находит два одинаковых максимальных элемента.
Суть проблемы в том, что я не могу соединить два этих алгоритма. Массив сортируется, а как его отсортировать, начиная со второго максимального элемента я не пойму.
Вот набросок программы:
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.

Прошу помощи!