Отсортировать в матрице столбцы по убыванию значений элементов в первой строке

Задача

Отсортировать в матрице столбцы по убыванию значений элементов в первой строке.

Данную задачу можно понять так:

  1. отсортировать необходимо первую строку матрицы;
  2. остальные элементы каждого столбца должны переместиться в тот же столбец, куда переместился их первый (верхний) элемент, т.е. следовать за ним.

Решение

См. сортировка выбором. Можно попробовать использовать метод пузырька.

Отличие лишь в том, что цикл сортировки включает перестановку всех элементов очередного столбца матрицы.

const
    n = 4; m = 6;
var
    arr: array[1..n,1..m] of integer;
    i,j,k,id: byte;
    min: integer;
 
begin
    randomize;
    for i:=1 to n do begin
        for j:=1 to m do begin
            arr[i,j] := random(50) - 25;
            write(arr[i,j]:4);
        end;
        writeln;
    end;
 
    k := m;
    j := 1;
    while k > 1 do begin
        min := arr[1,1];
        id := 1;
        for j:=2 to k do
            if arr[1,j] < min then begin
                min := arr[1,j];
                id := j;
            end;
        arr[1,id] := arr[1,j];
        arr[1,j] := min;
        for i:=2 to n do begin
            min := arr[i,id];
            arr[i,id] := arr[i,j];
            arr[i,j] := min;
        end;
        k := k - 1;
    end;
 
    writeln;
    for i:=1 to n do begin
        for j:=1 to m do
            write(arr[i,j]:4);
        writeln;
    end;
readln;
end.

Тема

Матрицы

Уровень

Сложные задачи

Комментарии

const
M=5;
N=5;
var
mas:array [1..N,1..M] of integer;
i,j,k,c:integer;
Begin
for i:=1 to N  do begin
 for j:=1 to M do begin
 mas[i,j]:=random(10);
 write(mas[i,j]:2);
 end;
 writeln;
end;
for k:=1 to M-1 do
 for j:=1 to M-k do begin
 if mas[1,j]<mas[1,j+1] then
 for i:=1 to N do begin
  c:=mas[i,j];
  mas[i,j]:=mas[i,j+1];
  mas[i,j+1]:=c;
 end;
end;
writeln;
for i:=1 to N  do begin
 for j:=1 to M do
 write(mas[i,j]:2);
 writeln;
end;
end.

//Ваша матрица
int temp = 0;
 
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    if (myMatrix[0, i] < myMatrix[0, j])
                    {
                        temp = myMatrix[0, j];
                        myMatrix[0, j] = myMatrix[0, i];
                        myMatrix[0, i] = temp;
                        for (int k = 1; k < n; k++)
                        {
                            temp = myMatrix[k, j];
                            myMatrix[k, j] = myMatrix[k, i];
                            myMatrix[k, i] = temp;
                        }
                    }
                }
            }
 
            Console.WriteLine();
 
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    Console.Write(myMatrix[i, j] + "\t");
                }
                Console.WriteLine();
            }

Добавить комментарий

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
CAPTCHA на основе изображений
Введите символы, которые показаны на картинке.