1. 程式人生 > 其它 >Arrays類、氣泡排序、稀疏陣列

Arrays類、氣泡排序、稀疏陣列

Arrays類

package base;

import java.util.Arrays;

/**
 * Arrays類
 */
public class ArraysTest {
    public static void main(String[] args) {
        int [] a = {1,2,3,4543,3,422,45,24,33};
        System.out.println(Arrays.asList(a));
        System.out.println(Arrays.toString(a));
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));
        printA(a);
        System.out.println();
        //Arrays.fill(a,0);//指定元素被填充
        System.out.println(Arrays.toString(a));
        Arrays.fill(a,2,4,0);
        System.out.println(Arrays.toString(a));
    }

    /**
     * 手寫to_string方法
     * @param a
     */
    public static void printA(int [] a){
        for (int i = 0; i <a.length ; i++) {
            if(i==0){
                System.out.printf("[");
            }
            if(i==a.length-1){
                System.out.print(a[i]+"] ");
            }else{
                System.out.print(a[i]+", ");
            }
        }
    }
}

氣泡排序

package base;

import java.util.Arrays;

/**
 *
 * 氣泡排序
 *
 * 1.在陣列中,比較相鄰的兩個元素,要是第一個元素比第二個元素大,就交換位置
 * 2.每次比較都會產生一個較大和較小的數字
 * 3.下一輪就可以少一次排序
 * 4.依次迴圈,直到結束
 */
public class Demo04 {
    public static void main(String[] args) {
        int [] array = {1,223,23,45,3,24,533,3};
        System.out.println(Arrays.toString(sort(array)));
    }

    public static int [] sort(int [] array){
        int temp = 0;
        //外層迴圈:判斷我們要走多少次
        for (int i = 0; i <array.length-1 ; i++) {
            //內層迴圈:比較判斷兩個數,如果第一個數比第二個數大,就交換位置
            for (int j = 0; j <array.length-1-i ; j++) {
                temp = array[j];
                if(array[j+1]>array[j]){
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
        }
        return array;
    }
}

稀疏陣列

當一個數組大部分元素為0,或者為同一值的陣列時,可以用稀疏陣列來儲存該陣列,起到壓縮的作用;

稀疏陣列的處理方式是:記錄陣列一共有幾行幾列,有多少個不同值;

把具有不同值的元素和行列及值記錄在小規模的陣列中,從而縮小程式的規模;

需求:編寫五子棋遊戲中,有存檔退出和續上盤的功能;

​ 因為該二維陣列的很多預設值為0,因此記錄了很多沒有意義的資料;

​ 解決:稀疏陣列;

package base;

import java.util.Arrays;

/**
 * 稀疏陣列
 */
public class Demo05 {
    public static void main(String[] args) {
        //建立一個二維陣列,11行11列,白棋為0,黑棋為1
        int [][] array1 = new int[11][11];
        array1[1][2] = 1;
        array1[2][3] = 2;

        System.out.println("原始陣列為:");

        for (int [] ints : array1) {
            for (int anInt: ints) {
                System.out.print(anInt + "\t");
            }
            System.out.println();
        }

        //建立為稀疏陣列
        //儲存有效數字
        int sum = 0;
        for (int i = 0; i <11 ; i++) {
            for (int j = 0; j <11 ; j++) {
                if(array1[i][j]!=0){
                    sum++;
                }
            }
        }
        System.out.println("有效值個數為:"+sum);
        System.out.println("-----------------");

        //建立一個稀疏陣列
        int [][] array2 = new int [sum+1][3];
        array2[0][0] = 11;
        array2[0][1] = 11;
        array2[0][2] = sum;

        //便利二維陣列,把非0的值存到此陣列中
        int count = 0;
        for (int i = 0; i <array1.length ; i++) {
            for (int j = 0; j <array1[i].length ; j++) {
                if(array1[i][j]!=0){
                    count ++;
                    array2[count][0]=i;
                    array2[count][1]=j;
                    array2[count][2]=array1[i][j];
                }
            }
        }

        System.out.println("輸出稀疏陣列:");

        for (int i = 0; i < array2.length ; i++) {
            System.out.println(array2[i][0]+"\t"+
                    array2[i][1]+"\t"+
                    array2[i][2]);
        }

        System.out.println("-----------------");
        //1.還原稀疏陣列
        int[][]array3 = new int [array2[0][0]][array2[0][1]];
        //2.給其中元素還原他的值
        for (int i = 1; i < array2.length ; i++) {
            array3[array2[i][0]][array2[i][1]] = array2[i][2];
        }
        //2.列印
        System.out.println("還原的陣列為:");
        for (int [] ints : array3) {
            for (int anInt: ints) {
                System.out.print(anInt + "\t");
            }
            System.out.println();
        }
    }
}