[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M1Zhqwrj-1601888086840)(C:\Users\黄松松\AppData\Roaming\Typora\typora-user-images\image-20201003105357660.png)]
在idea中要查看一个能直接使用的类就直接ctrl加鼠标左键
package Arrays; import java.lang.reflect.Array; import java.util.Arrays; /** * @author java小白松 */ public class ArraysDome07 { public static void main(String[] args) { int[] a = {74, 34, 52, 5, 52, 56, 43}; System.out.println(Arrays .toString(a)); printArrays(a); System.out.println(a);//[I@1d44bcfa存放数组的地址 Arrays.sort(a);//自动排序 Arrays.fill(a ,2,4,000);//自动填充 System.out.println( ); System.out.println(Arrays.toString(a)); } public static void printArrays(int [] a){ for (int i = 0; i < a.length; i++) { if(i==0){ System.out.print("["); } if (i==a.length-1){ System.out.print(a[i]+"]"); } } } }冒泡排序是最为出名的排序算法之一,共有八大排序
冒泡的代码还是相当简单,两层循环外层冒泡轮数,里层依次比较,程序 员江湖中人尽皆知
这个算法的时间复杂度o(n2);
package Arrays; import java.lang.reflect.Array; import java.util.Arrays; /** * @author java小白松 */ public class ArraysDome08 { public static void main(String[] args) { int [] a={102,3,4,25,535,4}; int [] sort= sort(a); System.out.println(Arrays.toString(sort)); } public static int[] sort(int [] arrays){ boolean flag=false;// 用来判断数组是否为有序的如果有序的就停止排序 for (int i = 0; i < arrays.length-1; i++) { for (int j=0;j<arrays.length-1-i;j++){ int c; if(arrays[j+1]<arrays[j]){ c=arrays[j]; arrays[j]=arrays[j+1]; arrays[j+1]=c; flag=true; } } if (flag==false){ break; } } return arrays; } } /**冒泡排序 * 每一次对相邻的两个数进行比较,如果第一个数大于第二个数他们两个就交换位置 * 每一次都能找最大或者最小值 * 下一轮少一次排序 * */需求:编写五子棋优先中,有存盘退出和续上盘的功能
分析问题:因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数组
解决:稀疏数组
记录数组一共有几行几列,有多少不同值
把具有不同值的元素和行列级及值在一个小规模的数组中,从而缩小程序的规模
左边是原始数组,右边数稀疏数组
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7fPG8XiY-1601888086841)(C:\Users\黄松松\AppData\Roaming\Typora\typora-user-images\image-20201005155956622.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JRN1yFQU-1601888086843)(C:\Users\黄松松\AppData\Roaming\Typora\typora-user-images\image-20201005160038699.png)]
package Arrays; import java.util.Arrays; /** * @author java小白松 */ public class ArraysDome09 { public static void main(String[] args) { // 1.创建一个二维数组11*11,0:没有棋子,1:有黑棋子 // 2有白棋子 int[][] arrays = new int[11][11]; arrays[1][2] = 1; arrays[2][3] = 2; //输出原始的数组 System.out.println("输出原始的数组"); for (int[] ints : arrays) {//这个是把二维数组转化为一维数组 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 (arrays[i][j] != 0) { sum++; } } } System.out.println("有效值的个数" + sum); //创建一个稀疏数组的数组 int[][] arrays2 = new int[sum + 1][3]; arrays2[0][0] = 11; arrays2[0][1] = 11; arrays2[0][2] = sum; //遍历二维数组,将非零的元素,存放在稀疏数组中 int count=0; for (int i = 0; i < arrays.length; i++) { for (int j = 0; j < arrays[i].length; j++) { if(arrays[i][j]!=0){ count++; arrays2[count][0]=i; arrays2[count][1]=j; arrays2[count][2]=arrays[i][j]; } } } System.out.println("输出稀疏数组"); for (int i = 0; i < arrays2.length; i++) { System.out.println(arrays2[i][0]+"\t" +arrays2[i][1]+"\t" +arrays2[i][2]+"\t"); } System.out.println("================="); System.out.println("还原稀疏数组"); //读取稀疏数组 int [][] arrays3=new int[arrays2[0][0]][arrays2[0][1]]; //给其中的元素还原值 for (int i = 1; i < arrays2.length; i++) { arrays3[arrays2[i][0]][arrays2[i][1]]=arrays[i][2]; } //打印原来的数组 for (int[] ints : arrays3 ) {//这个是把二维数组转化为一维数组 for (int anInt : ints) {//这个是用来输出所有的一维数组 System.out.print(anInt + "\t"); } System.out.println(); } } }} //打印原来的数组 for (int[] ints : arrays3 ) {//这个是把二维数组转化为一维数组 for (int anInt : ints) {//这个是用来输出所有的一维数组 System.out.print(anInt + “\t”); } System.out.println(); } } }
***反复看稀疏数组***