Сортировка двумерного массива (новичок)
Здравствуйте! У меня есть квадратный двумерный массив, который надо отсортировать. Проблема в том что у меня нет расширения java.util.Arrays. можно ли как-то перезалить библиотеку или все ручками? Java 8.101, eclipse helios
Ошибка — import cannot be resolved
Добавлено через 19 минут
Походу у меня половины библиотек нет
Сортировка двумерного массива
Всем привет! Помогите решить проблему, пожалуйста, у меня есть двумерный массив массивов.
Сортировка двумерного массива
ребят, вот я создал двумерный массив, мне надо сортировать его либо выбором либо вставкой, не.
Пузырьковая сортировка двумерного массива
Задан 2-й массив. Требуется отсортировать каждую строку по убыванию.Сортировка пузырьковая должна.
1)у вас что-то неправильно подключено
2)Как запустить hello word , найдите видео в нете
а)установка jdk
b)установка среды, повторите и тогда пробуйте ваш класс, пожалуйста!
возьми свою матрицу и пройдись каждым элементом по матрице
если элемент меньше либо равен следующему то меняешь их местами
если для одномерного массива это буде цикл в цикле, то для двумерного
цикл { цикл { цикл { цикл { (условие) { действие; } } } } }
Сообщение от TotalUSE
Сообщение от TotalUSE
Ну тыже понимаешь что тебе надо взять каждый элемен массива и пройтись по всему массиву. И сравнить элементы?
Добавлено через 8 часов 4 минуты
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
public int[][] sortMatrix(int[][] matrix) { int temp; for (int i = 0; i matrix.length; i++) { for (int j = 0; j matrix[i].length; j++) { for (int k = 0; k matrix.length; k++) { for (int l = 0; l matrix[k].length; l++) { if (matrix[i][j] = matrix[k][l]) { temp = matrix[i][j]; matrix[i][j] = matrix[k][l]; matrix[k][l] = temp; } } } } } return matrix; }
TotalUSE, А можно то же самое, но, для наглядности, с выводом в консоль?
1-я строка выбрасывает ошибку:
source_file.java:3: error: ‘;’ expected
int[][] sortMatrix(int[][] matrix) ^
source_file.java:3: error: ‘;’ expected
int[][] sortMatrix(int[][] matrix) ^
2 errors
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
public class BubbleSort { /** * сортировка двумерного массива * @param matrix * @return */ public int[][] sortMatrix(int[][] matrix) { int temp; for (int i = 0; i matrix.length; i++) { for (int j = 0; j matrix[i].length; j++) { for (int k = 0; k matrix.length; k++) { for (int l = 0; l matrix[k].length; l++) { if (matrix[i][j] = matrix[k][l]) { temp = matrix[i][j]; matrix[i][j] = matrix[k][l]; matrix[k][l] = temp; } } } } } return matrix; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
import org.junit.Assert; import org.junit.Test; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; public class BubbleSortTest { @Test public void matrixSortTest() { int[][] matrix = new int[][]{ {8, 3, 5}, {1, 4, 6}, {9, 7, 2} }; Assert.assertThat(new BubbleSort().sortMatrix(matrix), is(new int[][]{ {1, 2, 3}, {4, 5, 6}, {7, 8, 9} })); } }
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
import java.util.Arrays; public class SortOnRowMatrix { private static int getNumElementsMatrix(int [][] matrix) { int countElements = 0; for (int [] rows : matrix) countElements += rows.length; return countElements; } private static int [][] getSortedMatrixFromOneDimArr(int [] oneDimArray, int [][] matrix) { Arrays.sort(oneDimArray); int indexOneDimArray = 0; for (int i = 0; i matrix.length; i++) { for (int j = 0; j matrix[i].length; j++) { matrix[i][j] = oneDimArray[indexOneDimArray++]; } } return matrix; } private static int [] getOueDimSortedArrayFromMatrix(int [][] matrix) { int [] ret = new int[getNumElementsMatrix(matrix)]; int index = 0; for (int [] rows : matrix) for (int elem : rows) ret[index++] = elem; return ret; } private static void printMatrix(int [][] matrix) { for (int [] rows : matrix) { for (int elem : rows) System.out.printf("%2d,", elem); System.out.println(); } System.out.println("_________"); } public static void main(String[] args) { int[][] piramida = {{5}, {1,6}, {4, 3, 2}}; printMatrix(piramida); piramida = getSortedMatrixFromOneDimArr(getOueDimSortedArrayFromMatrix(piramida),piramida); printMatrix(piramida); } }
Двумерные массивы в java – инициализация, вывод и сортировка
Двумерный массив – это массив одномерных массивов. Я никогда не использовал 4-мерные массивы, даже трехмерные не так распространены.
Теперь возникает вопрос, когда используются многомерные массивы? Ну, 2D-массивы очень распространены в платформенных играх, таких как Super Mario, для представления экрана или местности; 2D блоки можно также использовать для того, чтобы представить электронную таблицу, или шахматы. Еще одним популярным применением являются матрицы.
Для представления матриц 3×2 необходимо 2 двумерных массива, состоящих из массива длины 3. Другими словами, каждая строка в двумерном массиве является одномерным массивом.
Java действительно не поддерживает многомерные массивы, но позволяет создавать и использовать массивы любого количества измерений. В истинном 2D массиве все элементы занимают непрерывный блок памяти, но в Java это не так. Вместо этого многомерный массив является массивом массива.
Это в отличие от языков, таких как C или FORTRAN, который позволяет массиву Java иметь строки различной длины, т. е. может иметь 2 столбца в одной строке и 3 столбца.
Массив 2×2 может содержать всего 4 элемента, и к ним можно получить доступ с помощью индекса строк и столбцов, например, [0][0] даст вам элементы в первой строке и первом столбце, аналогично[1][1] даст вам элементы из 2-й строки и 2-го столбца. Индекс начинается с 0 и заканчивается на -1.
Второе измерение является необязательным в Java. Вы можете создать 2D массив без указания обоих измерений, например, int[4][] является допустимым.
При создании двумерных или трехмерных array, первое измерение должно быть обязательно int[][3] – так нельзя, но int[3][] – это можно.
Как объявить двумерный массив в Java?
Вместо одной скобки вы будете использовать две, например, int [] [] – двумерный целочисленный массив. Определяется это следующим образом:
int[][] multiples = new int[4][2]; // 2D integer array 4 строки и 2 столбца String[][] cities = new String[3][3]; // 2D String array 3 строки и 3 столбца
Кстати, когда вы изначально объявляете, вы должны помнить, что нужно указать первое измерение, например, следующее объявление является неверным:
int[][] wrong = new int[][]; // not OK, you must specify 1st dimension int[][] right = new int[2][];
Выражение выдаст ошибку “переменная должна предоставить либо выражения измерения, либо инициализатор массива” во время компиляции. С другой стороны, при заполнении, второе измерение является необязательным и даже если вы не укажете, компилятор не будет ругаться, как показано ниже:
String[][] myArray = new String[5][]; // OK String[][] yourArray = new String[5][4]; // OK
Потому что двумерный массив не что иное, как массив из одномерных массивов, из-за этого, вы также можете создать двумерный, где отдельные одномерные имеет разную длину, как показано в следующем примере.
class TwoDimensionalArray < public static void main(String[] args) < String[][] salutation = < , >; // Mr. Kumar System.out.println(salutation[0][0] + salutation[1][0]); // Mrs. Kumar System.out.println(salutation[0][1] + salutation[1][0]); > > The output from this program is: Mr. Kumar Mrs. Kumar
В этом примере вы можете видеть объявление двумерного массива, но его первая строка имеет 3 элемента, а вторая строка имеет только один элемент.
Вы можете получить доступ к элементам, используя оба индекса или только один индекс. Например, salutation[0][1] представляет единственную строку в Java, в то время как salutation[0] представляет одномерный.
Пока мы только что объявили и создали массив, но не инициализировали. Здесь можно увидеть значения по умолчанию для различных типов.
boolean[][] booleans = new boolean[2][2]; System.out.println("booleans[0][0] : " + booleans[0][0]); byte[][] bytes = new byte[2][2]; System.out.println("bytes[0][0] : " + bytes[0][0]); char[][] chars = new char[1][1]; System.out.println("chars[0][0] : " + (int)chars[0][0]); short[][] shorts = new short[2][2]; System.out.println("short[0][0] : " + shorts[0][0]); int[][] ints = new int[3][2]; System.out.println("ints[0][0] : " + ints[0][0]); long[][] longs = new long[2][2]; System.out.println("longs[0][0] : " + longs[0][0]); float[][] floats = new float[1][2]; System.out.println("floats[0][0] : " + floats[0][0]); double[][] doubles = new double[2][2]; System.out.println("doubles[0][0] : " + doubles[0][0]); Object[][] objects = new Object[2][2]; System.out.println("objects[0][0] : " + objects[0][0]); Output booleans[0][0] : false bytes[0][0] : 0 chars[0][0] : 0 short[0][0] : 0 ints[0][0] : 0 longs[0][0] : 0 floats[0][0] : 0.0 doubles[0][0] : 0.0 objects[0][0] : null
Массив символов немного сложнее, потому что, если вы печатаете 0 как символ, он напечатает нулевой символ, и поэтому я использовал его целочисленное значение, приведя к int.
Инициализация
Теперь есть два способа инициализировать двумерный массив в Java:
В следующем примере мы узнаем, как выполнить цикл через двумерный массив, инициализировать каждый элемент и вывести (напечатать).
// initializing two dimensional array as literal String[][] names = < , , , >; int[][] board = new int[3][3]; for (int i = 0; i < board.length; i++) < for (int j = 0; j < board[i].length; j++) < board[i][j] = i + j; >>
Вам понадобится столько циклов, какова размерность массива. Например, для явной инициализации трехмерного массива потребуются три вложенных цикла for. С другой стороны, для инициализации двумерного массива достаточно двух вложенных циклов for.
Как вывести
Если вы хотите получить доступ к каждому элементу, то вам нужно выполнить итерацию по двумерному массиву, используя два цикла for. Почему? Потому что вам нужно два индекса для доступа к отдельному элементу.
Вы можете использовать расширенный для каждого цикла или классический для цикла со счетчиком. Для того, чтобы напечатать(сделать вывод) содержимое 2D массива, вы можете использовать либо этот метод, либо Arrays.deepToString(), который возвращает строку всех элементов.
import java.util.Arrays; /** * Java Program to initialize and print two dimensional array in Java. */ class Basics < public static void main(String args[]) < // initializing two dimensional array as literal String[][] names = < , , , >; // how to initialize two dimensional array in Java // using for loop int[][] board = new int[3][3]; for (int i = 0; i < board.length; i++) < for (int j = 0; j < board[i].length; j++) < board[i][j] = i + j; >> // now let's print a two dimensional array in Java for (int[] a : board) < for (int i : a) < System.out.print(i + "\t"); >System.out.println("\n"); > // printing 2D array using Arrays.deepToString() method System.out.println("another way to print 2D arrays"); System.out.println(Arrays.deepToString(board)); > > Output: 0 1 2 1 2 3 2 3 4 another way to print 2D arrays [[0, 1, 2], [1, 2, 3], [2, 3, 4]]
Сортировка двумерного массива Java
Пусть нам дан двумерный массив Порядка N X M и номер столбца K (1<=K<=m). Наша задача – отсортировать по значениям в столбце K.
Input : If our 2D array is given as (Order 4X4) 39 27 11 42 10 93 91 90 54 78 56 89 24 64 20 65 Sorting it by values in column 3 Output : 39 27 11 42 24 64 20 65 54 78 56 89 10 93 91 90
Универсальный способ сортировки массива заключается в использовании Arrays.sort.
// Java код для сортировки 2D матрицы // по любой колонке import java.util.*; class sort2DMatrixbycolumn < // Function to sort by column public static void sortbyColumn(int arr[][], int col) < // Using built-in sort function Arrays.sort Arrays.sort(arr, new Comparator() < @Override // Compare values according to columns public int compare(final int[] entry1, final int[] entry2) < // To sort in descending order revert // the '>' Operator if (entry1[col] > entry2[col]) return 1; else return -1; > >); // End of function call sort(). > // Driver Code public static void main(String args[]) < int matrix[][] = < < 39, 27, 11, 42 >, < 10, 93, 91, 90 >, < 54, 78, 56, 89 >, < 24, 64, 20, 65 >>; // Sort this matrix by 3rd Column int col = 3; sortbyColumn(matrix, col - 1); // Display the sorted Matrix for (int i = 0; i < matrix.length; i++) < for (int j = 0; j < matrix[i].length; j++) System.out.print(matrix[i][j] + " "); System.out.println(); >> >
Получим:
39 27 11 42
24 64 20 65
54 78 56 89
10 93 91 90
Средняя оценка 3.1 / 5. Количество голосов: 22
Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.
Видим, что вы не нашли ответ на свой вопрос.
Напишите комментарий, что можно добавить к статье, какой информации не хватает.
Сортирование матрицы (двухмерного массива) Java?
Задался вопросом (новичек в Jave, просто решаю пока задачки начальных уровней), что будет лучше для сортировки матрицы, перегнать ее в массив, отсортировать, а потом назад в матрицу, или же сразу сортировать матрицу?
Как можно в Idea проверить, какое решение более быстро работает и меньше выделяет памяти на процесс?
Оценить 1 комментарий
Если вы планируете сортировать матрицу, то конечно эффективней будет хранить её в виде одномерного массива, чтоб можно было эффективно отсортировать его с помощью быстрой сортировки реализованной методе sort в класса java.util.Arrays.
А чтоб с массивом можно было работать как с матрицей, можно реализовать класс-адаптер
import java.util.Arrays; public class IntMatrix < private final int[] lineMatrix; private final int n; private final int m; public IntMatrix(int[] lineMatrix, int n, int m) < if (n < 0 || m < 0 || lineMatrix.length != n * m) throw new IllegalArgumentException(); this.lineMatrix = lineMatrix.clone(); this.n = n; this.m = m; >public int get(int i, int j) < if (i < n && j < m) return lineMatrix[i * m + j]; else throw new ArrayIndexOutOfBoundsException(); >public void set(int value, int i, int j) < if (i < n && j < m) lineMatrix[i * m + j] = value; else throw new ArrayIndexOutOfBoundsException(); >public void sort() < // готовая реализация быстрой сортировки Arrays.sort(lineMatrix); >public int getN() < return n; >public int getM() < return m; >>
public static void main(String[] args) < int n = 10, m = 15; IntMatrix intMatrix = new IntMatrix(new int[n * m], n, m); fillMatrixByRandomValues(intMatrix); printMatrix(intMatrix); intMatrix.sort(); System.out.println("---------------"); printMatrix(intMatrix); >/** заполнение матрицы случайными числами */ static void fillMatrixByRandomValues(IntMatrix matrix) < Random random = new Random(); for (int i = 0; i < matrix.getN(); i++) < for (int j = 0; j < matrix.getM(); j++) < matrix.set(random.nextInt(1000), i, j); >> > /** печать матрицы в консоль */ static void printMatrix(IntMatrix matrix) < for (int i = 0; i < matrix.getN(); i++) < for (int j = 0; j < matrix.getM(); j++) < System.out.printf("%s\t", matrix.get(i , j)); >System.out.println(); > >
Линейный массив будет занимать меньше места, чем двумерный. Сортировка реализованная в классе java.util.Arrays хорошо и по скорости и по расходу памяти.