重新开始第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][