Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/54: Рейтинг темы: голосов - 54, средняя оценка - 4.81
0 / 0 / 2
Регистрация: 11.05.2015
Сообщений: 35

Сортировка матрицы по k-ому столбцу

14.03.2016, 15:23. Показов 10493. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. В лабораторной работе нужно ввести с консоли n - размерность матрицы a[n] [n]. Задать значения элементов матрицы в интервале значений от n1 до n2 с помощью датчика случайных чисел и упорядочить матрицу в порядке убывания k-го столбца.
Со вводом матрицы и заполнением практически понятно все, а с сортировкой не выходит. В задании нужно ввести номер столбца, по которому будем сортировать, его отсортировать в порядке убывания и вместе с ним остальные строки.
Пишем на идее, пятнадцатая версия. Нужно все максимально упрощенно, для уровня начинающего.
Огромное спасибо заранее ответившему.
Знаю примерно как сортировать в С++, в джаву это всунуть не получается(

P.S. например если была матрица
1 2 3 4
5 6 7 8
6 5 1 10
2 1 5 8
Если например выбираем второй столбец, должно выйти
5 6 7 8
6 5 1 10
1 2 3 4
2 1 5 8
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.03.2016, 15:23
Ответы с готовыми решениями:

Что не так подскажите, нужно отсортировать массив 5х5 по 1-ому и 5-ому столбцу по убыванию их значений
#include <stdio.h> int main(void) { int mass, tmp; printf("Двумерный целочисленный массив размерностью 5х5: \n"); for...

Оставить только слова, относящиеся к к-ому столбцу
Помогите со скриптом. Реализовать аналог утилиты cut, которая во входящем со стандартного ввода потоке строк оставляет только слова,...

Связанная сортировка матрицы по столбцу
Здравствуйте, вы бы не могли мне помочь, у меня есть матрица 120 строк и 6 столбцов (или двухмерный массив), не подскажете как мне...

15
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
14.03.2016, 15:42
Цитата Сообщение от Sandor19 Посмотреть сообщение
Нужно все максимально упрощенно, для уровня начинающего.
не совсем тот уровень, но не все же пузырьком делать. Что непонятно - спрашивайте.
Java
1
2
3
4
5
6
7
8
9
int n = 1;
        int a[][] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 6, 5, 1, 10 }, { 2, 1, 5, 8 } };
        Arrays.sort(a, (x, y) -> y[n]-x[n]);
        for (int i[] : a)
        {
            for (int j : i)
                System.out.print(String.format("%3d", j));
            System.out.println();
        }
3
0 / 0 / 2
Регистрация: 11.05.2015
Сообщений: 35
16.03.2016, 12:21  [ТС]
Такого не проходили и нужно именно проще. Получилось как-то вот так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
System.out.println("Выберите столбец: ");
String E= br.readLine();
int e=Integer.valueOf(E).intValue();
 
System.out.println("Итог:");
 
for (int i=0; i<m; i++)
for (int k=i+1; k < m; k++) {
if (A[i][e] > A[k][e]){
for (int j=0; j < m; j++) {
int temp = A[i][j];
A[i][j]=A[i][e];
A[i][e]=temp;
}
}
}
И в самой сортировке где-то ошибка, которую я не могу никак исправить.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
16.03.2016, 13:22
Цитата Сообщение от Sandor19 Посмотреть сообщение
И в самой сортировке где-то ошибка, которую я не могу никак исправить.
е никак не влияет на свап строк, только в условии
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i = 0; i < m; i++)
            for (int k = i + 1; k < m; k++)
            {
                if (A[i][e] < A[k][e])
                {
                    for (int j = 0; j < m; j++)
                    {
                        int temp = A[i][j]; //e никак не влияет на выбор ячейки
                        A[i][j] = A[k][j];
                        A[k][j] = temp;
                    }
                }
            }
Цитата Сообщение от Sandor19 Посмотреть сообщение
Такого не проходили
это не повод не изучить что-то новое)
0
0 / 0 / 2
Регистрация: 11.05.2015
Сообщений: 35
16.03.2016, 21:48  [ТС]
Все равно не сортирует как нужно, выходит что-то вот такое, если выбирать 2 столбец.
24 49 98
35 53 99
65 102 14

65 102 14
24 49 98
35 53 99
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
16.03.2016, 22:06
Sandor19, выкладывайте весь код, от начала до конца.
Кликните здесь для просмотра всего текста
Java
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
int A[][] = { { 24, 49, 98}, { 35, 53, 99}, { 65, 102, 14}};
        int m = 3;
        int e = 1;
        for (int i[] : A)
        {
            for (int j : i)
                System.out.print(String.format("%4d", j));
            System.out.println();
        }
        System.out.println();
        for (int i = 0; i < m; i++)
            for (int k = i + 1; k < m; k++)
            {
                if (A[i][e] < A[k][e])
                {
                    for (int j = 0; j < m; j++)
                    {
                        int temp = A[i][j]; //e никак не влияет на выбор ячейки
                        A[i][j] = A[k][j];
                        A[k][j] = temp;
                    }
                }
            }
        for (int i[] : A)
        {
            for (int j : i)
                System.out.print(String.format("%4d", j));
            System.out.println();
        }

вывод
Java
1
2
3
4
5
6
7
  24  49  98
  35  53  99
  65 102  14
 
  65 102  14
  35  53  99
  24  49  98
1
0 / 0 / 2
Регистрация: 11.05.2015
Сообщений: 35
16.03.2016, 22:11  [ТС]
От нас требуют вот такого вот громадного и неудобного кода, так понятно, что все можно куда проще(

Java
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
public class Main {
 
    public static void main(String[] args) {
 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        try {
            System.out.println("Введите размерность матрицы: ");
            String  n= br.readLine();
            int m=Integer.valueOf(n).intValue();
            System.out.println("Введите границы рандома: ");
            String  Q= br.readLine();
            int q=Integer.valueOf(Q).intValue();
            String  W= br.readLine();
            int w=Integer.valueOf(W).intValue();
 
            System.out.println("Ваша матрица: ");
            
            int[][] A = new int[m][m];
            for (int i=0; i<m; i++)
            {
                for (int j=0; j<m; j++)
                {
                    A[i][j] = q+ (int) (Math.random()*((w-q)+1));
                }
            }
            
            for (int i=0; i<m; i++)
            {
                for (int j=0; j<m; j++)
                {
                    System.out.print( A[i][j]+" ");
                }
                System.out.print("\n");
            }
 
 
            System.out.println("Выбирайте столбец: ");
            String  E= br.readLine();
            int e=Integer.valueOf(E).intValue();
 
 
            System.out.println("Итог:");
 
            
            for (int i=0;  i<m; i++)
                for (int k=i+1; k < m; k++) {
                    if (A[i][e] > A[k][e]){
                        for (int j=0; j < m; j++) {
                            int temp = A[i][j];
                            A[i][j]=A[i][e];
                            A[i][e]=temp;
                        }
                    }
                }
 
 
 
            for (int i=0; i<m; i++)
            {
                for (int j=0; j<m; j++)
                {
                    System.out.print(A[i][j]+" ");
                }
                System.out.print("\n");
            }
        } catch (IOException r) {
            System.out.println("ошибка ввода " + r);
        }
        catch (NumberFormatException r) {
            System.out.println("ошибка невозможного преобразования строки в числовой формат " + r);
        }
 
 
 
    }
}
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
16.03.2016, 22:20
Sandor19, ну так сравните мой цикл сортировки и ваш, я даже комментарий оставил внутри...
Цитата Сообщение от Sandor19 Посмотреть сообщение
так понятно, что все можно куда проще(
а вы выкладывайте со всеми своими вводами и выводами. А так приходится самому задавать переменные своим способом.
0
0 / 0 / 2
Регистрация: 11.05.2015
Сообщений: 35
16.03.2016, 22:26  [ТС]
Исправляла, был тот же результат. Теперь запустила - заработало, но выдает ошибку, если выбираю третий столбец.

Добавлено через 2 минуты
Брала 3 на 3 матрицу. Взяла 4 на 4 - перестал сортировать совсем, по тому же третьему столбцу.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
16.03.2016, 22:29
Sandor19, опять та же ошибка, выкладывайте код(если он изменяется относительно последней версии) и содержимое консоли, которое вам не нравится. Наверняка 3й столбец обозначаете цифрой 3, а не 2, т.к. индексы с нуля считаются.
Цитата Сообщение от Sandor19 Посмотреть сообщение
Исправляла, был тот же результат. Теперь запустила - заработало
машина ошибается реже, чем человек)
1
0 / 0 / 2
Регистрация: 11.05.2015
Сообщений: 35
16.03.2016, 22:38  [ТС]
Вот исправленный:
Java
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
public class Main {
 
    public static void main(String[] args) {
 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        try {
            System.out.println("Введите размерность матрицы: ");
            String  n= br.readLine();
            int m=Integer.valueOf(n).intValue();
            System.out.println("Введите границы рандома: ");
            String  Q= br.readLine();
            int q=Integer.valueOf(Q).intValue();
            String  W= br.readLine();
            int w=Integer.valueOf(W).intValue();
 
            System.out.println("Ваша матрица: ");
            //�������
            int[][] A = new int[m][m];
            for (int i=0; i<m; i++)
            {
                for (int j=0; j<m; j++)
                {
                    A[i][j] = q+ (int) (Math.random()*((w-q)+1));
                }
            }
            // �����
            for (int i=0; i<m; i++)
            {
                for (int j=0; j<m; j++)
                {
                    System.out.print( A[i][j]+" ");
                }
                System.out.print("\n");
            }
 
 
            System.out.println("Выбирайте столбец: ");
            String  E= br.readLine();
            int e=Integer.valueOf(E).intValue();
 
 
            System.out.println("Итог:");
 
            for (int i=0;  i<m; i++)
                for (int k=i+1; k < m; k++) {
                    if (A[i][e] > A[k][e]){
                        for (int j=0; j < m; j++) {
                            int temp = A[i][j];
                            A[i][j]=A[k][j];
                            A[k][j]=temp;
                        }
                    }
                }
 
 
 
            for (int i=0; i<m; i++)
            {
                for (int j=0; j<m; j++)
                {
                    System.out.print(A[i][j]+" ");
                }
                System.out.print("\n");
            }
        } catch (IOException r) {
            System.out.println("ошибка ввода " + r);
        }
        catch (NumberFormatException r) {
            System.out.println("ошибка невозможного преобразования строки в числовой формат " + r);
        }
 
 
 
    }
}

Ввожу матрицу 3 на 3 и пробую сортировать по 3 столбцу:
95 12 30
81 80 35
21 12 74
Выдает Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException : 3
С матрицей 4 на 4 выдает ошибку при выборе 4 столбца. При выборе третьего отсортировало неправильно:
74 52 43 45
41 56 79 50
27 46 29 76
61 107 19 90

Выбирайте столбец:
3
Итог:
74 52 43 45
41 56 79 50
27 46 29 76
61 107 19 90

Пробовала еще с матрицами 4 на 4, их не сортирует правильно совсем.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
16.03.2016, 22:48
Лучший ответ Сообщение было отмечено Sandor19 как решение

Решение

Sandor19, ВО! сразу бы такие данные, все было бы куда проще
1. строка 46 вашего кода if (A[i][e] > A[k][e]){
моего кода: if (A[i][e] < A[k][e])
(вам же по убыванию надо, верно?)
2.
Цитата Сообщение от Sandor19 Посмотреть сообщение
Ввожу матрицу 3 на 3 и пробую сортировать по 3 столбцу:
еще раз, матрица 3х3, это значит у нее есть столбцы 0, 1, 2. НЕТ столбца под номером 3. Так же в матрице 4х4 нет 4
Если хотите это пофиксить
Java
1
2
int e = Integer.valueOf(E).intValue();
e--; //добавляете эту строку и индекс будет соответствовать компьютерному представлению
1
0 / 0 / 2
Регистрация: 11.05.2015
Сообщений: 35
16.03.2016, 22:54  [ТС]
Заработало, аллилуйя!
Спасибо вам огромное.
Теперь все работает и все понятно)
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
16.03.2016, 22:59
Цитата Сообщение от Sandor19 Посмотреть сообщение
Заработало, аллилуйя!
Спасибо вам огромное.
Теперь все работает и все понятно)
всегда пожалуйста)
0
 Аватар для TomasMaple
0 / 0 / 0
Регистрация: 17.04.2020
Сообщений: 47
23.06.2021, 11:34
КОП, подскажите пожалуйста есть ли справочная информация по методу который Вы использовали? //не смогла найти
Java
1
 Arrays.sort(a, (x, y) -> y[n]-x[n]);
И возможно ли его использовать для сортировки матрицы по k-строке? Если да, то как нужно изменить аргументы метода?
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
24.06.2021, 15:36
Цитата Сообщение от TomasMaple Посмотреть сообщение
подскажите пожалуйста есть ли справочная информация по методу который Вы использовали? //не смогла найти
Документация класса Arrays

Цитата Сообщение от TomasMaple Посмотреть сообщение
И возможно ли его использовать для сортировки матрицы по k-строке?
Транспонируйте, сортируйте, транспонируйте обратно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.06.2021, 15:36
Помогаю со студенческими работами здесь

Сортировка матрицы по последнему столбцу
Нужно отсортировать матрицу по последнему столбцу. То есть в зависимости сортировки последнего столбца отсортировать всю матрицу. Я...

Сортировка матрицы по строке/столбцу
Как отсортировать матрицу по n строке? Нужно отсортировать матрицу, например по 2 столбцу. То есть упорядочить элементы 2 столбца, а...

Сортировка матрицы по заданному столбцу
Как сделать сортировку матрицы по заданному столбцу в javascript?

Сортировка матрицы по столбцу вместе со строкой
Отсортировать столбец вместе со строкой. Пример: Отсортировать по 5 столбцу Что было: 1 3 5 6 7 2 4 6 8 2 9 7 5 3 1 1 1 1...

Быстрая сортировка матрицы по первому столбцу
Мне нужно с помощью быстрой сортировке отсортировать матрицу. Матрица состоит из 0 и 1, кроме первого, первый столбец - это сумма элементов...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru