冒泡排序和稀疏数组

冒泡排序

双层循环,外层冒泡轮数,内层依次比较

public class B {
	
	public static void main(String[] args) {
		int[] a= {12,45,65,21,89};
		System.out.pr
            intln(Arrays.toString(sort(a)));
	}
	
	 /*冒泡排序
	 *比较数组中两个相邻的元素,如果第一个数大于第二个数,就交换位置
	 *每一次比较都会产生出一个最大或者最小的数字
	 *下一轮就少一次排序
	 *依次循环,直到结束
	 */
	public static int[] sort(int[] a) {
		int t=0;
		for (int i = 0; i < a.length-1; i++) {
			for (int j = 0; j < a.length-1-i; j++)
            {
				if(a[j+1]>a[j]) {
					t=a[j];
					a[j]=a[j+1];
					a[j+1]=t;
				}
			}
		}
		return a;
	}
}

稀疏数组

数组中大部分元素为相同数值

处理方式:记录数组中有几行几列,有多少个不同的数值

把具有不同数值的元素和行列和值记录在一个小规模的数组中,从而缩小程序的规模

public static void main(String[] args) {
		int[][] a1=new int[11][11];
		a1[1][2]=1;
		a1[2][3]=1;
		//输出原始数组
		for(int[] ints:a1) {
			for(int anInt:ints) {
				System.out.print(anInt+" ");
			}
			System.out.println();
		}

		System.out.println("=================");
		//转换为稀疏数组
		//获取有效值的个数
		int sum=0;
		for (int i = 0; i < a1.length; i++) {
			for (int j = 0; j < a1.length; j++) {
				if(a1[i][j]!=0) {
					sum++;
				}
			}
		}
		System.out.println(sum);
		System.out.println("=================");
		
		//创建稀疏数组的数组
		int[][] a2=new int[sum+1][3];
		a2[0][0]=11;
		a2[0][1]=11;
		a2[0][2]=sum;
		
		//遍历二维数组,将非零的元素放在稀疏数组中
		int count=0;
		for (int i = 0; i < 11; i++) {
			for (int j = 0; j < 11; j++) {
				if(a1[i][j]!=0) {
					count++;
					a2[count][0]=i;
					a2[count][1]=j;
					a2[count][2]=a1[i][j];
				}
			}
		}
		
		for (int i = 0; i < a2.length; i++) {
			System.out.println(a2[i][0]+" "+a2[i][1]+" "+a2[i][2]);
			System.out.println();
		}
	}
//还原稀疏数组
		
		int[][] a3=new int[a2[0][0]][a2[0][1]];
		
		for (int i = 1; i < a2.length; i++) {
			for (int j = 0; j < 3; j++) {
				a3[a2[i][0]][a2[i][1]]=a2[i][2];
			}
		}
		
		for(int[] ints:a3) {
			for(int anInt:ints) {
				System.out.print(anInt+" ");
			}
			System.out.println();
		}
	}

输出结果:

0 0 0 0 0 0 0 0 0 0 0 
0 0 1 0 0 0 0 0 0 0 0 
0 0 0 1 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
=================
2
=================
11 11 2

1 2 1

2 3 1

0 0 0 0 0 0 0 0 0 0 0 
0 0 1 0 0 0 0 0 0 0 0 
0 0 0 1 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 

posted @ 2021-08-06 09:24  甲乙丙I  阅读(36)  评论(0)    收藏  举报