陣列的應用:Arrays類,氣泡排序,稀疏陣列
阿新 • • 發佈:2020-11-05
陣列的應用
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] } }
氣泡排序
是一種最出名的排序演算法。
- 比較陣列中,相鄰的兩個元素,如果第一個比第二個大,則交換他們的位置
- 每次比較都會產生一個最大或最小的數字
- 下一輪則可以上一次排序
- 一次迴圈,直到結束
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]記錄該元素的值。