|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Сортировка двумерного массива n*n (Диагональ матрицы)
Путем перестановки элементов квадратной вещественной матрицы добиться того, чтобы ее максимальный элемент находился в левом верхнем углу, следующий по величине – в позиции (2,2) , следующий по величине – в позиции (3,3), …, заполнив таким образом всю главную диагональ.
Вот что у меня в процедуре сортировки: Код:
procedure diagonal; var b,f,z,ib,jb:integer; begin setlength(di,n); f:=0; jb:=0; ib:=0; while f<n do begin b:=a[f,0]; for j:=0 to high(a) do begin for i:=0 to high(a) do begin if a[i,j]>b then if i=j then break else begin b:=a[i,j]; ib:=i; jb:=j; end; end; end; a[ib,jb]:=a[f,f]; a[f,f]:=b; inc(f); end; end; |
#2
|
|||
|
|||
вариант - сделать в несколько ходов.
1. Переписать индексы эдементов в одномерный массив. 2. Отсортировать этот массив по убыавнию значений элементов. 3. Заменить элементы по диагонали на соотв. по отсортированному массиву. Код сейчас писать некогда, если очень нужно, то может позже или завтра. |
#3
|
||||
|
||||
Согласен, за исключением одного.
3. После сортировки заполняется диагональ, а потом уже оставшиеся элементы. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#4
|
|||
|
|||
А зачем? Ему достаточно ведь только диагональ. Соответсвенно, в массиве просто храним координаты элементов, а потом меняем местами только N первых, которые будут составлять нашу новую диагональ.
|