Java中二维数组的排序的法方法


   我们都知道在数组中,如果要给数组元素排序的话可以调用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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM