冒泡排序、稀疏数组
冒泡排序
冒牌排序的算法思想,两两比较,前者大于后者,两者更换位置,已经比较过的不再进行重复比较。
int[] a = {12,3,45,64,5,53,6,7,32,9};
for(int i = 0; i < a.length; i++){
for(int j = 1; j< a.length -i; j++){
if(a[i] > a[j]){
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
稀疏数组
稀疏数组,便于节省内存
public class Demo4 {
public static void main(String[] args) {
//原数组 0为空白 1为黑棋 2为白棋
/**
* 稀疏数组 行|列|值
* 0 11 11 2
* 1 1 2 1
* 2 2 3 2
*/
int[][] a = new int[11][11];
a[1][2] = 1;
a[2][3] = 2;
for (int[] ints : a) {
for (int anInt : ints) {
System.out.print(anInt+" ");
}
System.out.println();
}
System.out.println("===========================");
//获取稀疏数组
int[][] sparseArray = sparseArray(a, calculateSum(a));
for (int[] ints : sparseArray) {
for (int anInt : ints) {
System.out.print(anInt+" ");
}
System.out.println();
}
System.out.println("=====================");
//还原数组
int[][] old = restoreArray(sparseArray);
for (int[] ints : old) {
for (int anInt : ints) {
System.out.print(anInt+" ");
}
System.out.println();
}
}
/**
* 计算稀疏数组个数
* @author sophie
* @date 2023/1/11 15:18
* @return int
*/
private static int calculateSum(int[][] a){
int sum = 0;
for (int[] ints : a) {
for (int anInt : ints) {
if (anInt!=0){
sum++;
}
}
}
return sum;
}
/**
* 稀疏数组
* @author sophie
* @date 2023/1/11 15:14
* @param a
* @return int[]
*/
private static int[][] sparseArray(int[][] a,int sum){
int[][] b = new int[sum+1][3];
//第0行
b[0][0] = 11;
b[0][1] = 11;
b[0][2] = sum;
//给稀疏数组赋值
int count = 0;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j]!=0){
count ++;
b[count][0] = i;
b[count][1] = j;
b[count][2] = a[i][j];
}
}
}
return b;
}
/**
* 还原数组
* @author sophie
* @date 2023/1/11 15:28
* @return int[][]
*/
private static int[][] restoreArray(int[][] sparseArray){
int[][] restoreArray = new int[sparseArray[0][0]][sparseArray[0][1]];
for (int i = 1; i < sparseArray.length; i++) {
restoreArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
return restoreArray;
}
}