Есть ли какой-то алгоритм так называемой сквозной сортировки 2-мерного массива. например: 2 4 8 5 2 3 3 7 1 в рез-те должно отсортировать так: 1 3 5 2 3 7 2 4 8 И разложение данного массива в одномерный, а потом сортировка его и опять запись в 2-мерный - не катит.
Merlin
19.04.2006 2:55
Серж Может нужно отсортировать каждую строку по возрастанию .
volvo
19.04.2006 3:06
Насколько видно из приведенного примера - матрица сортируется "по столбцам"...
Если "не катит" разложение массива в одномерный, и потом обратная запись в матрицу, можно предложить приведение типа матрицы к массиву (фактически никакого разложения не происходит, ты просто заставишь компилятор "под другим углом" посмотреть на матрицу), или придется шаманить с индексами - готовь большой бубен...
Серж
19.04.2006 20:47
Цитата(volvo @ 18.04.2006 20:06)
Если "не катит" разложение массива в одномерный, и потом обратная запись в матрицу, можно предложить приведение типа матрицы к массиву (фактически никакого разложения не происходит, ты просто заставишь компилятор "под другим углом" посмотреть на матрицу), или придется шаманить с индексами - готовь большой бубен...
A что понимается под приведением типа матрицы к массиву? И как это происходит?
volvo
19.04.2006 21:58
Приведение матрицы к массиву - ты говоришь компилятору, что "на те данные, которые я раньше описал, как матрицу, в этом случае нужно смотреть, как на одномерный массив"... То есть, ФАКТИЧЕСКИ, никаких преобразований матрицы в одномерный массив не производится, ФИЗИЧЕСКИ ты работаешь с той же матрицей, так что, по-моему, приведенное тобой условие нигде не нарушается.
Как сделать? Ну, например, вот так:
const size_x = 3; size_y = 3;
type column = array[1 .. size_y] of integer; matrix = array[1 .. size_x] of column;
pvector = ^vector; vector = array[1 .. maxInt div sizeof(integer)] of integer;
procedure print(const mx: matrix); var i, j: integer; begin for i := 1 to size_x do begin for j := 1 to size_y do write(mx[j][i]:4); writeln; end; end;
procedure bubble(var ar: vector; n: integer); var i, j, T: Integer; begin for i := 1 to n do for j := n downto i + 1 do if ar[Pred(j)] > ar[j] then begin T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T end end;
begin writeln('before:'); print(a);
bubble(pvector(@a)^, size_x * size_y);
writeln('after:'); print(a); end.
Серж
19.04.2006 22:18
спасибо Volvo
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.