1. 程式人生 > 實用技巧 >陣列的應用:Arrays類,氣泡排序,稀疏陣列

陣列的應用:Arrays類,氣泡排序,稀疏陣列

陣列的應用

Arrays類

其他工具可檢視JDK幫助文件

package Array;

import java.util.Arrays;

public class Demon7 {
    public static void main(String[] args) {
        int[] a = {2,87,458,21,54,87,12,9};
        System.out.println(a); //[I@14ae5a5
        System.out.println(Arrays.toString(a));  //Arrays方法提供的,把陣列變為String型別
                                                 //結果為[2, 87, 458, 21, 54, 87, 12, 9]
        Arrays.sort(a);                          //排序陣列 升序

        System.out.println(Arrays.toString(a));  //[2, 9, 12, 21, 54, 87, 87, 458]
    }
}

氣泡排序

是一種最出名的排序演算法。

  1. 比較陣列中,相鄰的兩個元素,如果第一個比第二個大,則交換他們的位置
  2. 每次比較都會產生一個最大或最小的數字
  3. 下一輪則可以上一次排序
  4. 一次迴圈,直到結束
package Array;

import java.util.Arrays;

public class Demon8 {
    public static void main(String[] args) {
        int[] a = {7,6,5,4,9,8};

        System.out.println(Arrays.toString(a));
        sort(a);
        System.out.println(Arrays.toString(a));
    }
    //氣泡排序
    public static int[] sort(int[] a){
        int temp = 0;
        for (int i = 0; i < a.length-1; i++) {
            for (int j = 0; j < a.length-1-i; j++) { //這裡length-1是因為下面存在j+1,正常遍歷的情況下,j<length即可。
                                                     //-i是因為j迴圈一次之後,就排出一個最大或最小值,故可以減少一次迴圈 ??
                                                     //可能本次未排出一個,但下次會排除兩個,總的來說一次迴圈排出一個 ??
                                                     //尚不瞭解比較次數的數學原理,我只知道迴圈一次,下次迴圈可少比較一次
                if (a[j]>a[j+1]){
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }

            }

        }
        return a;}
}

稀疏陣列

在二維陣列中,提取少數有效值的,做到壓縮陣列。

計算有多少個有效值:遍歷原陣列,如果元素不等於0,則sum數加1,獲得稀疏陣列的行數。

建立稀疏陣列 Array[sum] [3]

確定有效值在原陣列中的位置並記錄在稀疏陣列中:int count = 0;遍歷原陣列,如果元素不等0,count+1,稀疏陣列[count] [0]記錄該元素的a,[count] [1]記錄該元素的j,[count] [2]記錄該元素的值。