| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Сортировка и вывод двумерного массива |
| Автор: Kizja 15.4.2010, 18:16 | ||||
| Привет, столкнулся с проблемой грамотной сортировки и вывода двойного массива на экран... Вывод должен быть следующим: X1 X2 X3 X4 X5 SUM Y1 0 1 2 3 4 10 Y2 5 6 7 8 9 35 Y3 10 11 12 13 14 60 Y4 15 16 17 18 19 85 Y5 20 21 22 23 24 110 SUM 50 55 60 65 70 Условия такие, что как горизонтальные, так и вертикальные ряды можно менять местами, т.е. начальная таблица имеет последовательность X1 X2 X3 X4 X5 и Y1 Y2 Y3 Y4 Y5, но они могут менять свои места... Написал следующий, на мой взгляд, не самый лучший вариант:
Кто-нибудь в состоянии предложить более грамотный вариант ? Особенно недоволен методом print(), который как-то совсем покорявому выполняет свою задачу... Данные не обязаны быть в двумерном массиве int[][], а могут иметь какой либо другой формат - главная задача в том, чтобы имелась возможность смены колонок и учёт изменения их индексации и суммы колонок... |
| Автор: MaxPayneC 15.4.2010, 18:30 |
| Что есть и что нужно сделать? |
| Автор: jk1 15.4.2010, 18:42 | ||
Работает для квадратных матриц, на прямоугольные легко обобщается
|
| Автор: Kizja 15.4.2010, 19:25 | ||
| jk1, твой вариант, если я не ошибаюсь, не соответствует условиям задачи... он просто вроде сортирует элементы, в данной задаче рассматривается ряд как единое целое... MaxPayneC, условия такие, что программа должна позволять оперировать целыми колонками и рядами: Изначально может быть любой массив, но предположим, что он такой: 0 1 2 3 4 ============== 0 | 11 12 13 14 15 | 1 | 21 22 23 24 25 | 2 | 31 32 33 34 35 | 3 | 41 42 43 44 45 | 4 | 51 52 53 54 55 | 5 | 61 62 63 64 65 | ============== (0..4 и 0..5 индексы вертикальных и горизонтальных колонок) задаётся допустим что хотим: а) поменять местами горизонтальные колонки с индексами 0 и 3 б) поменять местами вертикальные колонки с индексами 0 и 4
т.е. меняются местами горизонтальные элементы: 11 12 13 14 15 и 41 42 43 44 45 получается такое: 41 42 43 44 45 21 22 23 24 25 31 32 33 34 35 11 12 13 14 15 51 52 53 54 55 61 62 63 64 65 и меняются вертикальные элементы: 41 45 21 25 31 35 11 и 15 51 55 61 65 получается в итоге такое: 45 42 43 44 41 25 22 23 24 21 35 32 33 34 31 15 12 13 14 11 55 52 53 54 51 65 62 63 64 61 Кроме того, что поменяли надо учитывать начальные индексы и расчитывать сумму рядов, т.е. вывод будет такой: 4 1 2 3 0 SUM ============== 3 | 45 42 43 44 41 | 215 1 | 25 22 23 24 21 | 115 2 | 35 32 33 34 31 | 165 0 | 15 12 13 14 11 | 65 4 | 55 52 53 54 51 | 265 5 | 65 62 63 64 61 | 216 ============== SUM 240 222 228 234 216 Тот вариант, что привёл я в прошлом сообщении работает правильно, но он корявый... |
| Автор: MaxPayneC 15.4.2010, 21:33 |
| Мне кажется, ваш подход оптимален для этой задачи. Единственное что, я бы суммы не хранил. А в целом поход зависит от того, зачем вам это надо - если нужно часто выводить результат и пересчет будет занимать много времени - тогда не хранить, а пересчитывать суммы. Если не секрет, зачем вам такие операции с матрицей? |
| Автор: _Y_ 15.4.2010, 22:41 |
| Поскольку тема не в алгоритмах, а в Java, думаю не грех упоминуть про Arrays.sort. Дописать соответстующий Comparator. А потом только сортировать в разных направлениях транспонируя матрицу туда-сюда. |
| Автор: Kizja 15.4.2010, 23:15 |
| MaxPayneC, Да не, не секрет - в университете надо реализовать алгоритм, если интересно, то вот здесь презентация в PowerPoint о том, как он должен работать: http://maurus.ttu.ee/ained/IDN5590_K10/doc/3/pluss.zip Я уже реализовал и правильно работает, но у меня не было предусмотрено программой вывод индексов элементов и их суммы - и никак теперь не придумать, как нормально переделать... получается какое-то извращение Если интересно, то могу в принципе выложить программу (строчек 200 кода), хотя врядли у вас есть желание вникать... Могу в принципе на###кодить, но не хотелось бы... поэтому и создал эту тему |