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