我们都知道在数组中,如果要给数组元素排序的话可以调用Arrays.sort(数组名)方法,但是这种方法具有它的局限性,只适用于一维数组。那么,如何给二维数组排序呢?这里有两种思路:
第一种思路:用冒泡排序法的思想,用循环重复遍历数据中的元素,第一次循环找出所有元素中的最大(小)元素并输出,以后的每次循环找出上次循环之后剩余元素中的最大(小)值并输出直至循环结束;
第二种思路:先新建一个一维数组,将二维数组的元素转存到新建的一维数组中,对一维数组调用Arrays.sort(方法名)排序,当然也可以使用其他排序方法对一维数组进行排序;
第一种思路的实现代码:
1 public static void main(String[] args) { 2 //定义一个3行二维数组 3 int[][] nums=new int[3][]; 4 //给每一行分配不同的列 5 for(int i=0;i<nums.length;i++) 6 { 7 8 nums[i]=new int[i+2]; 9 } 10 //给nums[][]赋值 11 System.out.println("数组元素的值及排列方式如下:"); 12 int a=10; 13 for(int i=0;i<nums.length;i++) 14 { 15 16 for(int j=0;j<nums[i].length;j++) 17 { 18 nums[i][j]=a; 19 System.out.print(" "+nums[i][j]+" "); 20 a--; 21 } 22 System.out.println(); 23 } 24 //计算数组中元素的个数 25 int b=0; 26 for (int i=0;i<nums.length;i++) 27 { 28 //控制列 29 for(int j=0;j<nums[i].length;j++) 30 { 31 b++; 32 } 33 } 34 System.out.println("数组中元素的个数为:"+b); 35 //给数组元素从大到小排序 36 System.out.print("数组元素从大到小排序为:"); 37 //依次找出剩余元素中的最大值 38 for (int k=1;k<=b;k++) 39 { 40 //假设最大值是第一行第一个数 41 int max=nums[0][0]; 42 //控制行 43 for (int i=0;i<nums.length;i++) 44 { 45 //控制列 46 for(int j=1;j<nums[i].length;j++) 47 { 48 if(max<nums[i][j]) 49 { 50 /* 51 * 当max小于nums[i][j]中的元素时 52 * 将max的值与nums[i][j]中的元素对调 53 */ 54 int n= max; 55 max=nums[i][j]; 56 nums[i][j]=n; 57 } 58 } 59 } 60 /* 61 *因为第一次循环已经结束;n[0][0]的值要么是最大值被输出了,要么已经被赋给n[i][j]了, 62 *所以让n[0][0]的值为0;可以让前一次循环输出的最大值不再出现在下一次循环当中 63 */ 64 nums[0][0]=0; 65 System.out.print(" "+max+" "); 66 } 67 }
第二种思路的实现代码:
1 import java.util.*; 2 public class Arrays2Dsort1 { 3 public static void main(String[] args) { 4 //定义一个3行二维数组 5 int[][] nums=new int[3][]; 6 //给每一行分配不同的列 7 for(int i=0;i<nums.length;i++) 8 { 9 10 nums[i]=new int[i+2]; 11 } 12 //给nums[][]赋值 13 System.out.println("数组元素的值及排列方式如下:"); 14 //int a=10; 15 for(int i=0;i<nums.length;i++) 16 { 17 18 for(int j=0;j<nums[i].length;j++) 19 { 20 /** 21 * nums[i][j]=a; 22 *a--; 23 */ 24 nums[i][j]= (int) (Math.random() * 1000); 25 System.out.print(" "+nums[i][j]+" "); 26 } 27 System.out.println(); 28 } 29 30 //计算数组中元素的个数 31 int b=0; 32 //控制行 33 for (int i=0;i<nums.length;i++) 34 { 35 //控制列 36 for(int j=0;j<nums[i].length;j++) 37 { 38 b++; 39 } 40 } 41 System.out.println("数组中元素的个数为:"+b); 42 int[] num= new int[b]; 43 44 //表示数组num的索引值 45 int c=0; 46 //控制行 47 for (int i=0;i<nums.length;i++) 48 { 49 //控制列 50 for(int j=0;j<nums[i].length;j++) 51 { 52 num[c]=nums[i][j]; 53 c++; 54 } 55 } 56 57 //给数组元素用Arrays.sort(方法名)从小到大排序 58 Arrays.sort(num); 59 System.out.print("数组元素从小到大排序为:"); 60 for(int i:num) 61 { 62 System.out.print(" "+i+" "); 63 } 64 System.out.println(); 65 //用冒泡法个给数组排序 66 int temp; // 记录临时中间值 67 for (int i = 0; i < b - 1; i++) { 68 for (int j = i + 1; j < b; j++) { 69 // 交换两数的位置 70 if (num[i] < num[j]) { 71 temp = num[i]; 72 num[i] = num[j]; 73 num[j] = temp; 74 } 75 } 76 } 77 System.out.print("数组元素从大到小排序为:"); 78 for(int i:num) 79 { 80 System.out.print(" "+i+" "); 81 } 82 System.out.println(); 83 //用选择排序法给数组排序 84 for (int i = 0; i < b; i++) 85 { 86 int k = i; 87 for (int j = b - 1; j >i; j--) 88 { 89 if (num[j] > num[k]) k = j; 90 } 91 temp = num[i]; 92 num[i] = num[k]; 93 num[k] = temp; 94 } 95 System.out.print("数组元素从大到小排序为:"); 96 for(int i:num) 97 { 98 System.out.print(" "+i+" "); 99 } 100 System.out.println(); 101 //用插入法给数组排序 102 int j; 103 for(int i=1; i<b; i++) { 104 temp = num[i]; 105 for(j = i; j > 0 && temp > num[j-1]; j--) 106 num[j] = num[j-1]; 107 num[j] = temp; 108 } 109 System.out.print("数组元素从大到小排序为:"); 110 for(int i:num) 111 { 112 System.out.print(" "+i+" "); 113 } 114 } 115 }
以上就是对二维数组排序的两种思路的总结。
参考博文:
Java实现几种常见排序方法http://www.cnblogs.com/sevenyuan/archive/2009/12/04/1616897.html