外观
递归
递归
直接或间接调用自己(类似数学归纳)
例:
// 求9的阶乘
private static int factorialRecursion(int n) {
// 1的阶乘
if (n<2) {
return 1;
} else {
return factorialRecursion(n-1) * n;
}
}
System.out.println(factorialRecursion(3)==6);
// 输出为true
应用:
树形结构的遍历
数组(一种引用类型)
一种数据结构(保存相同类型的元素)
引用型变量分配在堆内存中
特性
1.有序性
2.有限性(一经定义无法更改长度)
3.同质性(同一种类型)
使用
1.定义
强烈推荐 数据类型[] 数组名;来定义数组
2.初始化
(1) array = {value1,value2,value3............} 静态初始化(编译时)
(2) 使用for循环遍历初始化 动态初始化(运行时)
实质上分配内存空间
3.操作
下标从0开始,最大下标为长度-1
同一个数组名进行多次new操作其实质是换了一个数组
int[] array;
array = new int[5];
array[2] = 3;
System.out.println(array);
System.out.println(array[2]);
array = new int[10];
array[8] = 9;
System.out.println(array);
System.out.println(array[8]);
System.out.println(array[2]);
/*
[I@15db9742
3
[I@6d06d69c
9
0
当重新进行new分配空间后其相当于创建了新数组,地址不一样
*/
遍历
for循环确定下标遍历
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
foreach循环遍历(无下标)
for (int i : bubbleSort) {
System.out.println(i);
}
多维数组
本质:元素为数组的数组
遍历:多重循环
初始化
int[] [] array = new int [行数] [列数];
列数可省略行数不可省略
排序
选择排序
从第一个数开始,与后面所有的数相比较,找出最小的数,放在第一个位置,以此类推,每一轮确定一个相对于这一轮最小的数。
1.确定比较趟数
2.定义最小位置为i
3.分别将minPos的元素与i+~length-1之间的元素比较
4.如果有更小的将minPos赋值为当前元素的下标
5.交换元素值
int temp;
for (int i = 0; i < array.length-1; i++) {
int minPos=i;
for (int j = i+1; j < array.length; j++) {
if (array[j]<array[minPos]) {// 分别与后面每一个元素比较
minPos=j;
}
temp=array[i];
array[i]=array[minPos];
array[minPos]=temp;
}
}
冒泡排序
从左往右,两两相互比较大小,左边的大就交换位置,循环往复,把较大的放后面。
1.比较相邻的元素。如果第一个比第二个大,就交换它们两个;
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
3.针对所有的元素重复以上的步骤,除了最后一个;
重复步骤1~3,直到排序完成。
int temp;
for (int i = 0; i < tempArray.length-1; i++) {
for (int j = 0; j < tempArray.length-1-i; j++) {
if (tempArray[j+1]>tempArray[j]) {// 相邻两个元素比较
temp=tempArray[j];
tempArray[j]=tempArray[j+1];
tempArray[j+1]=temp;
}
}
}
问题
这里书写今日所遇到问题及解决方法 不要忽略小问题,小问题也要记下来。( 勿以善小而不为 )
选择排序与冒泡排序的区别
1.冒泡排序是左右两个数相比较,而选择排序是用后面的数和每一轮的第一个数相比较;
2.冒泡排序每轮交换的次数比较多,而选择排序每轮只交换一次;
3.冒泡排序是通过数去找位置,选择排序是给定位置去找数;
4.当一个数组遇到相同的数时,冒泡排序相对而言是稳定的,而选择排序便不稳定;
5.在时间效率上,选择排序优于冒泡排序。
吐槽
这里是吐槽部分,内容不限。