Java中二维数组的排序方法:如何按升序和降序排列2D数组元素
数组可以被定义为二维数组。组成 2D 数组的矩阵是由行和列的集合构成的。由于 2D 数组的元素能够进行随机访问,所以我们能够利用索引来访问 2D 数组中的各个单元格,就如同我们可以访问一维数组那样。

在二维数组里,单元格拥有两个索引,其中一个是行号,另一个是列号。排序这种行为,是一种按照特定顺序来排列 2D 数组中元素的技术。2D 数组能够按照升序或者降序进行排序。接下来让我们来瞧瞧怎样在 Java 中对 2D 数组按照升序和降序进行不同的排序。
Java中的2D数组排序示例
下面介绍了不同的示例:
示例#1
Java 中有关于 2D 数组排序的示例,此示例是用来对 2D 数组的所有元素进行排序的。
代码:
package jex;
import java.util.*;
public class demo {
使用冒泡排序法来对二维数组进行排序。
将二维数组按照在大小为 n * m 的一维数组中的顺序进行排序。
公共静态 void 对(int 数组[][])进行排序。
int i, j, temp;
int n=arr.length;
int m=arr[0].length;
for (i = 0; i < n * m - 1; ++i) {
for (j = 0; j < n * m - 1 - i; ++j) {
if (arr[j / m][j % m] >如果 arr[(j + 1) / m][(j + 1) % m] 成立,那么就执行以下操作:
arr 中,先计算 (j + 1) 除以 m 的结果,将其作为一个索引,再计算 (j + 1) 对 m 取余的结果,将其作为另一个索引,然后取 arr 中这两个索引对应的元素赋值给 temp 。
arr 中 (j + 1) 除以 m 的结果作为行索引,(j + 1) 对 m 取余的结果作为列索引所对应的值等于 arr 中 j 除以 m 的结果作为行索引,j 对 m 取余的结果作为列索引所对应的值;
arr[j / m][j % m] = temp;
}
}
}
}
公共静态 void 打印(int 数组[][]) {
int i, j;
int n=arr.length;
int m=arr[0].length;
for (i = 0; i < n; ++i) {
for (j = 0; j < m; ++j) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int[][] arr={ { 5, 12, 17, 12, 23},
{ 1, 2, 4, 6, 8},
{21, 14, 7, 19, 27},
{ 3, 18, 9, 15, 25}
};
System.out.println("Array Before Sorting is : ");
print(arr);
sort(arr);
System.out.println("Array After Sorting is : ");
print(arr);
}
}
输出
sort()方法如同上面的程序那般,会对 2D 数组的每个元素进行迭代。在迭代过程中,若当前元素比下一个元素大,就会交换数字。最后,print 方法会把 2D 数组的所有元素展示出来。在 main 函数里,2D 数组是在调用 sort()函数之前以及之后进行创建和打印的,就如上面的输出所呈现的那样。
示例#2
Java 中有关于 2D 数组排序的示例,这个示例是要按照列来对 2D 数组的所有元素进行排序。
代码:
package jex;
import java.util.*;
public class demo {
public static void sort(int arr[][]) {
int i, j,k, temp;
int n=arr.length;
int m=arr[0].length;
for (k = 0; k < m; ++k) {
for (i = 0; i < n; ++i) {
for (j = 0; j < n - 1 - i; ++j) {
if (arr[j][k] > arr[j + 1][k]) {
temp = arr[j + 1][k];
arr[j + 1][k] = arr[j][k];
arr[j][k] = temp;
}
}
}
}
}
public static void print(int arr[][]) {
int i, j;
int n=arr.length;
int m=arr[0].length;
for (i = 0; i < n; ++i) {
for (j = 0; j < m; ++j) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int[][] arr={ { 5, 12, 17, 12, 23},
{ 1, 2, 4, 6, 8},
{21, 14, 7, 19, 27},
{ 3, 18, 9, 15, 25}
};
System.out.println("Array Before Sorting is : ");
print(arr);
sort(arr);
System.out.println("Array After Sorting is : ");
print(arr);
}
}
输出
sort()方法会像上面的重写程序那样,对 2D 数组的每个元素进行迭代,然后按照列来对数组进行排序。最终,print 方法会把 2D 数组的所有元素显示出来。在 main 函数里,2D 数组是在调用 sort()函数之前和之后分别进行创建和打印的,就如同上面的输出所呈现的那样。
示例#3
按行对二维数组的所有元素进行排序。
代码:
package jex;
import java.util.*;
public class demo {
// using bubble sort to sort 2D array
// sort 2D array same as it is in a 1D array of size n * m
public static void sort(int arr[][]) {
int i, j,k, temp;
int n=arr.length;
int m=arr[0].length;
for(k=0;karr[k][j+1]){
temp = arr[k][j+1];
arr[k][j+1] = arr[k][j];
arr[k][j] = temp;
}
}
}
}
}
public static void print(int arr[][]) {
int i, j;
int n=arr.length;
int m=arr[0].length;
for (i = 0; i < n; ++i) {
for (j = 0; j < m; ++j) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int[][] arr={ { 5, 12, 17, 12, 23},
{ 1, 2, 4, 6, 8},
{21, 14, 7, 19, 27},
{ 3, 18, 9, 15, 25}
};
System.out.println("Array Before Sorting is : ");
print(arr);
sort(arr);
System.out.println("Array After Sorting is : ");
print(arr);
}
}
输出
sort()方法会像之前那样,对 2D 数组的每个元素进行迭代,接着按行来对数组进行排序。之后,print 方法会把 2D 数组的所有元素展示出来。在 main 函数里,2D 数组是在调用 sort()函数之前以及之后分别进行创建和打印的,就如同上面所给出的输出那样。
结论
排序是一种将 2D 数组中的元素按照特定顺序进行排列的技术。在二维数组中,单元格拥有两个索引,分别是行号和列号。若大家希望了解更多相关知识,可关注动力节点的 Java 在线学习。其课程内容从入门到精通,细致且全面,非常适合没有基础的小伙伴学习,期望能对大家有所帮助。
Java数组