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

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

Arrays類

Arrays類中的方法都是static修飾的靜態方法,在使用的時候可以直接使用類名進行呼叫,而“不用”使用物件來呼叫(注意:是“不用”而不是“不能”)

常用功能:

  1. 給陣列賦值:通過fill方法

  2. 對陣列排序:通過sort方法,按升序

  3. 比較陣列:通過equals方法比較陣列中元素值是否相等

  4. 查詢陣列元素:通過binarySearch方法能對排序好的陣列進行二分查詢操作

氣泡排序

兩層迴圈,外層冒泡,裡層依次比較

1、比較陣列中,兩個相鄰的元素,如果前一個數比後一個數大,則交換位置
2、每一次比較,都會產生一個最大的數或者最小的數
3、下一輪則可以少一次排序
4、依次迴圈,直到結束

稀疏陣列

  1. 當一個數組中大部分元素為0,或者為同一個值的陣列時,可以使用稀疏陣列來儲存該陣列。

  2. 稀疏陣列的處理方式:

    1. 記錄陣列一共有幾行幾列,有多少個不同值

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

把二維陣列轉換為稀疏陣列在轉換為二維陣列

package com.dashu.array;

public class ArrayDemo08 {
public static void main(String[] args) {
//1.建立一個二維陣列11*11 0:沒有棋子 1:白棋 2:黑棋
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();
}

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);

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

//遍歷二維陣列,將非零的值,準放到稀疏陣列中
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];
}
}
}
for (int i = 0; i < array2.length; i++) {
System.out.println(array2[i][0]+"\t"
+array2[i][1]+"\t"
+array2[i][2]+"\t");
}

System.out.println("==============");
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];
}

//3.列印還原後的陣列
System.out.println("還原後的陣列為:");

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