Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Сортировка матрицы

Автор: kaktus 13.11.2008 11:53

НУжно отсортировать выделенные элементы произвольной матрицы по возрастанию(обозначены y)
y y y y y
y x x x y
y x x x y
y x x x y
y x x x y

Автор: Lapp 13.11.2008 14:41

Цитата(kaktus @ 13.11.2008 7:53) *
выделенные элементы произвольной матрицы
В каком направлении обходить?

Автор: kaktus 13.11.2008 20:07

по часовой стрелке!

Автор: samec 13.11.2008 23:52

Как вариант: считать в одномерный массив размерностью (N+N+M-2), (это если матрица размерностью (N*M)). Отсортировать этот одномерный массив любым методом сортировки -> записать на место отсортированный массив.

Автор: volvo 14.11.2008 0:02

Элементарно делается без доп. массива: берем любой метод сортировки, который работает с двумя соседними ячейками. К примеру, "пузырек" (кто-то говорит, что "пузырек" - это отстой, и непонятно зачем нужен? А вот нужен smile.gif Во избежание написания десятиэтажных кодов), и:

...
count := 2 * n + (m - 2);
for i := 1 to count do begin
ii := n; jj := m; pass := 1;
for j := count downto i + 1 do begin

ii_pred := ii; jj_pred := jj;
case pass of
1: begin dec(ii_pred); if ii_pred = 1 then pass := 2; end;
2: begin dec(jj_pred); if jj_pred = 1 then pass := 3; end;
3: begin inc(ii_pred); if ii_pred = n then pass := 4; end;
end;

if a[ii_pred, jj_pred] > a[ii, jj] then begin
T := a[ii_pred, jj_pred];
a[ii_pred, jj_pred] := a[ii, jj];
a[ii, jj] := T;
end;
ii := ii_pred; jj := jj_pred;

end;
end;
...
N - число строк матрицы, M - число столбцов...