for i := 1 to sqr(N) - 1 do
Begin
RowCurr := 1;
ColCurr := 1;
dRow := 1;
dCol := 0;
DirChanges := 0;
Fill_Length := N;
for j := 1 to sqr(N) - i do
Begin
ColPrev := ColCurr;
RowPrev := RowCurr;
//Получение следующих координат
Dec(Fill_Length);
if Fill_Length = 0 then
Begin
Fill_Length := N - ((DirChanges div 2) - 1) - 2;
Temp := dRow;
dRow := -dCol;
dCol := Temp;
Inc(DirChanges);
End;
Inc(ColCurr, dCol);
Inc(RowCurr, dRow);
//Обычное сравнение соседних элементов
if A[RowCurr, ColCurr] > A[RowPrev, ColPrev] then
Begin
Temp := A[RowCurr, ColCurr];
A[RowCurr, ColCurr] := A[RowPrev, ColPrev];
A[RowPrev, ColPrev] := Temp;
End;
End;
End;