重新开始第3天

递归结构包括两个部分:

递归头:什么时候不通用自身,如果没有头,将陷入死循环。

递归体:什么时候需要调用一身的方法。


数组的定义

数组是相同类型数据的有序集合。

数据描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。

其中,每一个数据称作为一个数组元素,每个数组元素可以通过一个下标访问它们。


Arrays类

int[] a = {1,2,3,45,6,7,8,95,2,21}
Arrays.sort(a);//数组进行排序
System.out.println(a);
Arrays.fill(a,0);//所有a数组中的元素赋值为0
System.out.println(a);
Arrays.fill(a,2,4,5)//a数组中下标2到4的元素赋值为5

冒泡排序

比较数组中,两个相邻的元素,如果第一个数比第二个数大,就交换它们的位置

每次比较,都会产生出一个最大,或者最小的数字

下一轮则可以少一次排序

依次循环,直到结束

public static void sort(int[] array){
   int temp = 0;
   for(int i = 0; i< array.length-1 ; i++){//比如array长度为5,当i等于0时
       for(int j  = 0; j< array.length-1-i; j++){//j = 0;j< 4 成立
           if(array[j+1] < array[j]){  //如果下标为0+1的元素小于下标为0的元素
               temp = array[j];   //则把下标0的元素值赋值给temp
               array[j] = array[j+1];//然后把下标为0+1的值赋值给下标0的元素
               array[j+1] = temp;//然后把本来下标为0的元素值再次赋值给下标为0+1的元素
          }                     //这样就做到把大的元素往移动
      }
  }  
       
}
当i等0时j走for循环就把最大的一个值排到了最后
i=1时接下来就是前4个数的比较重新比较,最后一个元素值就不用比较了
然后是前3个
然后是最后2个
   

稀疏数组

当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。

稀疏数组的处理方式是:

记录数组一共几行几列,有多少个不同值

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

​
public class ScannerTest {
   public static void main(String[] args) {
       int[][] index = new int[11][11];  //定义一个11x11的二维数组
       index[1][2] = 1;
       index[2][3] = 2;
       System.out.println("输出原始数组");
       for (int[] x : index) {              //循环二维数组
           for (int ids : x) {
               System.out.print(ids + "\t");
          }
           System.out.println();
      }
       int sum = 0;//设定一个int类型变量来记录2维数组中的有效元素值有几个
       for (int i = 0; i < 11; i++) {
           for (int j = 0; j < 11; j++) {
               if (index[i][j] != 0) {
                   sum++;
              }
          }
      }
       System.out.println("有效值为" + sum);//输出有效值
       int[][] index1 = new int[sum + 1][3];//设定一个sum+1行。3列的二维数组,+1是因为第一行的规定的定义行,后面的行数就要+1来表示行数
       index1[0][0] = 11;//第0行第0个元素值为11,表示行数
       index1[0][1] = 11;//第0行第1个元素值为11,表示列数
       index1[0][2] = sum;//第0行第2个元素值为sum,表示有效数字为多少
       int count = 0;
       for (int i = 0; i < index.length; i++) {//开始遍历二维数组
           for (int j = 0; j < index[i].length; j++) {
               if (index[i][j] != 0) {//按照上面所表示现在是一个3x3的二维数组
                   count++;//当有一个有效元素的时候connt+1 =1
                   index1[count][0] = i;//那么3X3二维数组中第1行第0个元素表示为i,来对应行数坐标
                   index1[count][1] = j;//那么3X3二维数组中第1行第1个元素表示为j,来对应列数坐标
                   index1[count][2] = index[i][j];//那么3X3二维数组中第1行第2个元素表示二维数组中i,j下面的元素值是多少
              }
          }
      }
       System.out.println("稀疏数组");
       for (int i = 0; i < index1.length; i++) {//用循环数组输出3X3二维数组中的所有元素值
           System.out.println(index1[i][0] + "\t"//第i行,第0列元素
                   + index1[i][1] + "\t"//第i行,第1列元素
                   + index1[i][2] + "\t");//第i行,第2列元素
      }
       System.out.println("-------------------------");
       System.out.println("还原");
       int[][] index2 = new int[index1[0][0]][index1[0][1]];//int[11][11]
       for (int i = 1; i < index1.length; i++) {//看清楚是从1开始
           index2[index1[i][0]][index1[i][1]] = index1[i][2];//index1[1][0]=1,index1[1][1]=2,index1[1][2]=1;
           // 综合index2[1][2] = 1;除了有效元素外,数组中没有初始化值的元素,都会被默认初始化为0
      }
       System.out.println("输出还原数组");//加强for输出二维数组
       for (int[] x : index) {
           for (int ids : x) {
               System.out.print(ids + "\t");
          }
           System.out.println();
      }
  }
}

 

posted @ 2020-09-22 00:34  锁猴  阅读(474)  评论(0)    收藏  举报