Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 26.02.2020
Сообщений: 15
.NET Core

Сортировка столбиков матрицы

27.08.2021, 15:17. Показов 2466. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста разобрать код (за что отвечают строчки).

Задание: Сортировать столбики матрицы по возрастанию максимального элемента:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using System;
 
class Program
{
    static void Main(string[] args)
    {
        int[,] arr = new int[,] { {1,1,4,0,5},
                                      {2,1,9,1,6},
                                      {3,1,2,0,3},
                                      {4,1,1,0,3},
                                      {7,1,9,0,3} };
 
        for (int n = 0; n < arr.GetLength(1); n++)
        {
            for (int j = 1; j < arr.GetLength(1); j++)
            {
                int sumPrevColumn = 0;
                for (int i = 0; i < arr.GetLength(0); i++)
                {
                    sumPrevColumn += arr[i, j - 1];
                }
 
                int sumCurrentColumn = 0;
                for (int i = 0; i < arr.GetLength(0); i++)
                {
                    sumCurrentColumn += arr[i, j];
                }
 
                if (sumPrevColumn > sumCurrentColumn)
                {
                    for (int k = 0; k < arr.GetLength(0); k++)
                    {
                        int temp = arr[k, j];
                        arr[k, j] = arr[k, j - 1];
                        arr[k, j - 1] = temp;
                    }
                }
            }
        }
 
 
 
 
        for (int i = 0; i < arr.GetLength(0); i++)
        {
            for (int j = 0; j < arr.GetLength(1); j++)
            {
                Console.Write("{0}\t", arr[i, j]);
            }
            Console.WriteLine();
        }
 
 
        Console.ReadLine();
 
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.08.2021, 15:17
Ответы с готовыми решениями:

Вывести номера столбиков матрицы,сумма квадратов которых наименьшая
В файле matrix.txt хранятся элементы числовой матрицы. Вывести номера столбиков матрицы,сумма квадратов которых наименьшая.

Сортировка столбиков матрицы по возрастанию
Здравствуйте. Необходимо выполнить сортировку столбиков матрицы по возрастанию суммы их элементов в маткаде с помощью программирования

Сортировка матрицы, чтоб сумма элементов столбиков увеличивалась. Нужна блок-схема и код на любом языке
Отсортировать столбики прямоугольной матрицы таким образом чтоб сумма элементов столбиков увеличивалась. Сортировку сделать методом выбора....

36
1524 / 515 / 126
Регистрация: 09.01.2018
Сообщений: 1,622
29.08.2021, 11:41
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Можно определить максимальный элемент в каждой колонки.
Отсортировать их с запоминанием индексов.
Потом переставит колонки согласно новых их индексов.
Не, зачем это.
Можно определить максимальный элемент в каждой колонки.
Отсортировать их с запоминанием индексов.
Потом переставит колонки согласно новых их индексов.

Скопировать колонку по индексу из старой матрицы в новую.

Добавлено через 1 минуту
Цитата Сообщение от Элд Хасп Посмотреть сообщение
У него сделано (насколько понял) сортировка по сумме элементов.
Да, именно так и сделано.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
29.08.2021, 11:44
Чтобы отсортировать колонки, надо найти сначала их максимальные элементы и отсортировать их.
А потом переставить колонки согласно полученному порядку их максимальных элементов.

Добавлено через 2 минуты
Цитата Сообщение от escoult Посмотреть сообщение
Скопировать колонку по индексу из старой матрицы в новую.
Я как-то по разному понимаю СОЗДАТЬ новую матрицу с нужным порядкам и отсортировать ИМЕЮЩУЮСЯ.
0
1524 / 515 / 126
Регистрация: 09.01.2018
Сообщений: 1,622
29.08.2021, 11:48
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Чтобы отсортировать колонки, надо найти сначала их максимальные элементы и отсортировать их.
Верно, найти максимумы и отсортировать максимумы.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
А потом переставить колонки согласно полученному порядку их максимальных элементов.
Зачем эта морока? Просто скопировать в новую матрицу по индексу.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
29.08.2021, 11:51
Цитата Сообщение от SharkiRect Посмотреть сообщение
static void Main(string[] args)
Сам алгоритм не проверял. просто заменил сумму на максимальный.
C#
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
        for (int n = 0; n < arr.GetLength(1); n++)
        {
            for (int j = 1; j < arr.GetLength(1); j++)
            {
                int maxPrevColumn = int.MinValue;
                for (int i = 0; i < arr.GetLength(0); i++)
                {
                    if (maxPrevColumn < arr[i, j - 1])
                        maxPrevColumn = arr[i, j - 1];
                }
 
                int maxCurrentColumn = int.MinValue;
                for (int i = 0; i < arr.GetLength(0); i++)
                {
                    if(maxCurrentColumn <  arr[i, j])
                        maxCurrentColumn = arr[i, j];
                }
 
                if (sumPrevColumn > sumCurrentColumn)
                {
                    for (int k = 0; k < arr.GetLength(0); k++)
                    {
                        int temp = arr[k, j];
                        arr[k, j] = arr[k, j - 1];
                        arr[k, j - 1] = temp;
                    }
                }
            }
        }
Добавлено через 1 минуту
Цитата Сообщение от escoult Посмотреть сообщение
Зачем эта морока? Просто скопировать в новую матрицу по индексу.
Потому, что СОЗДАТЬ новую матрицу и ИЗМЕНИТЬ существующую - это разные задачи.

Добавлено через 1 минуту
Как минимум, потом придёт копировать из новой обратно в старую.
Но в таком случае, гораздо проще использовать временный ступенчатый массив и применить к нему Array.Sort().
0
1524 / 515 / 126
Регистрация: 09.01.2018
Сообщений: 1,622
29.08.2021, 11:51
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я как-то по разному понимаю СОЗДАТЬ новую матрицу с нужным порядкам и отсортировать ИМЕЮЩУЮСЯ.
Ну так ОТСОРТИРОВАТЬ и ПЕРЕСТАВИТЬ КОЛОНКИ по индексам также не одно и то же.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
29.08.2021, 11:57
Цитата Сообщение от escoult Посмотреть сообщение
Ну так ОТСОРТИРОВАТЬ и ПЕРЕСТАВИТЬ КОЛОНКИ по индексам также не одно и то же.
СОРТИРОВКА - это всегда ПЕРЕСТАНОВКА.
Но не любая, а в нужном порядке.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3439 / 2759 / 575
Регистрация: 04.09.2018
Сообщений: 8,685
Записей в блоге: 3
29.08.2021, 12:00
Цитата Сообщение от Элд Хасп Посмотреть сообщение
СОРТИРОВКА - это всегда ПЕРЕСТАНОВКА
Согласен. Более того, сортировка ли, перестановка - это всегда выделение дополнительной памяти для временного хранения переносимого столбца. Задачу про Ханойские Башни все помнят?
Так вот тут есть два основных способа: 1 - перенос по срокам с использованием одной переменной int (долго), и 2 - перенос колонки целиком, с использованием временной переменной типа int[] (быстрее).
0
1524 / 515 / 126
Регистрация: 09.01.2018
Сообщений: 1,622
29.08.2021, 12:10
Цитата Сообщение от Элд Хасп Посмотреть сообщение
СОРТИРОВКА - это всегда ПЕРЕСТАНОВКА.
Ъм, и в упорядоченном массиве тоже?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
29.08.2021, 12:14
Цитата Сообщение от wizard41 Посмотреть сообщение
Задачу про Ханойские Башни все помнят?
Это уже реализовано у TC.
И думаю после моей правки - будет нормально работать.
Если делать что-то иное, то нужно более эффективное.
На ваше усмотрение.

Добавлено через 34 секунды
Цитата Сообщение от escoult Посмотреть сообщение
Ъм, и в упорядоченном массиве тоже?
Если нужно изменить порядок (то есть сортировку), то да.

Добавлено через 1 минуту
escoult, можно без сортировки через индексатор возвращать элементы в нужно порядке.
Но вряд ли это можно назвать сортировкой матрицы.
0
1524 / 515 / 126
Регистрация: 09.01.2018
Сообщений: 1,622
29.08.2021, 12:15
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если нужно изменить порядок (то есть сортировку), то да.
Не, наилучший случай, массив уже отсортирован в нужном порядке.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3439 / 2759 / 575
Регистрация: 04.09.2018
Сообщений: 8,685
Записей в блоге: 3
29.08.2021, 12:17
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Сам алгоритм не проверял. просто заменил сумму на максимальный.
На глаз вроде рабочий. Нечто подобное предложил бы и я. Вот только ПЕРЕПИСЬ исходного массива и ЗАПИСЬ в новый => равнозначные ли операции, с точки зрения быстродействия? Видимо об этом говорит escoult.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
29.08.2021, 12:19
Цитата Сообщение от escoult Посмотреть сообщение
Не, наилучший случай, массив уже отсортирован в нужном порядке.
Прибавление (+=) это всегда изменение переменной?
А прибавление нуля?

Если матрица уже отсортирована в нужном порядке, это означит, что ей не нужна новая сортировка.
И соответственно, так как не будет новой сортировки, то и не будет перестановки.
0
1524 / 515 / 126
Регистрация: 09.01.2018
Сообщений: 1,622
29.08.2021, 12:23
Цитата Сообщение от Элд Хасп Посмотреть сообщение
можно без сортировки через индексатор возвращать элементы в нужно порядке.
Но вряд ли это можно назвать сортировкой матрицы.
Ъм, надо бы у ТС-а поинтересоваться, в чем состоит задача, а результате или в процессе. Так если в процессе, то ваши перестановки по индексу - не являются сортировкой.

Правка ваша, кстати работать не будет, там сортировка не реализована.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
29.08.2021, 12:25
Цитата Сообщение от wizard41 Посмотреть сообщение
Вот только ПЕРЕПИСЬ исходного массива и ЗАПИСЬ в новый => равнозначные ли операции, с точки зрения быстродействия?
В основном зависит от количества итераций.
Плюс к этому какие-то ресурсы (в том числе) ещё нужны на создание нового массива (даже если он временный).

В коде TC, в максимально неудачном случае итераций по присваиванию элементов и поиску максимальных где-то порядка rows*rows*columns*columns* 3..5.
Точно не считал - это оценка "на глаз".
0
1524 / 515 / 126
Регистрация: 09.01.2018
Сообщений: 1,622
29.08.2021, 12:26
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если матрица уже отсортирована в нужном порядке, это означит, что ей не нужна новая сортировка.
Да, но вы об этом не знаете. когда вызываете метод сортировки.

Цитата Сообщение от Элд Хасп Посмотреть сообщение
И соответственно, так как не будет новой сортировки, то и не будет перестановки.
Ну вот, а вы говорили, что всегда перестановка.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
29.08.2021, 12:35
Цитата Сообщение от escoult Посмотреть сообщение
Правка ваша, кстати работать не будет, там сортировка не реализована.
Забыл в этой части переменные переименовать.
Писал здесь - не заметил.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
        for (int n = 0; n < arr.GetLength(1); n++)
        {
            for (int j = 1; j < arr.GetLength(1); j++)
            {
                int maxPrevColumn = int.MinValue;
                for (int i = 0; i < arr.GetLength(0); i++)
                {
                    if (maxPrevColumn < arr[i, j - 1])
                        maxPrevColumn = arr[i, j - 1];
                }
 
                int maxCurrentColumn = int.MinValue;
                for (int i = 0; i < arr.GetLength(0); i++)
                {
                    if(maxCurrentColumn <  arr[i, j])
                        maxCurrentColumn = arr[i, j];
                }
 
                // Это перестановка для получения нужного порядка колонок
                if (maxPrevColumn > minCurrentColumn)
                {
                    for (int k = 0; k < arr.GetLength(0); k++)
                    {
                        int temp = arr[k, j];
                        arr[k, j] = arr[k, j - 1];
                        arr[k, j - 1] = temp;
                    }
                }
            }
        }
Добавлено через 38 секунд
SharkiRect, обратите на то, что ранее опубликованный код был и ошибкой.

Добавлено через 4 минуты
SharkiRect, обратите на то, что ранее опуликованный код был и ошибкой.
Цитата Сообщение от escoult Посмотреть сообщение
Ну вот, а вы говорили, что всегда перестановка.
Это вопрос скорее философский, чем по программированию.

Является код (a, b) = (b, a) перестановкой значений a и b?

А если эти переменные одинакового значения?

Добавлено через 1 минуту
С точки зрения программирования - это код перестановки, независимо от значений.
Так же и в ответе о сортировке.
0
1524 / 515 / 126
Регистрация: 09.01.2018
Сообщений: 1,622
29.08.2021, 14:26
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Это вопрос скорее философский, чем по программированию.
Какой еще философский? )))
По самому что ни есть, программированию. Информатика не определяет сортировку, как применение каких либо конкретных способов достижения заданного порядка. Хотя в контексте задачи, термин сортировка может означать именно реализацию одного из известных алгоритмов сортировки. Но в контексте процесса, определяемого как сортировка, никаких требований или ограничений на этот счет нет. Как нет и требований к обязательному изменению исходной последовательности. Кстати, в задаче этого требования также нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.08.2021, 14:26
Помогаю со студенческими работами здесь

Перемножение внутри столбиков матрицы
Дана матрица Y. Необходимо сформировать массив x, элементы которого представляют произведения столбиков первой матрицы. int k=-1; for...

Ввод матрицы целых чисел размерностью 5×7 и вычисление элементов вектора сумм отрицательных элементов столбиков матрицы
Составить схему алгоритма и разработать проект для ввода матрицы целых чисел размерностью 5 × 7 и вычисления элементов вектора сумм...

Определить большую из сумм 1-2 и 3-4 столбиков матрицы 4х4
Определить большую из сумм 1-2 и 3-4 столбиков матрицы 4х4

Найти суммы элементов в каждом из столбиков матрицы А
Найти суммы элементов в каждом из столбиков матрицы А. Уж не силен я в маткаде, простите:(

Массив: Напечатать максимальные элементы столбиков матрицы
Напечатать максимальные элементы столбиков матрицы АС (5,5)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru