Arrays類、氣泡排序、稀疏陣列
阿新 • • 發佈:2021-12-09
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(); } } }