Skip to content

递归

989字约3分钟

java数据结构

2024-10-24

递归

直接或间接调用自己(类似数学归纳)

例:

// 求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循环遍历初始化 动态初始化(运行时)

实质上分配内存空间

屏幕截图 2021-09-01 105912

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 [行数] [列数];

列数可省略行数不可省略

屏幕截图 2021-09-01 113837

排序

选择排序

从第一个数开始,与后面所有的数相比较,找出最小的数,放在第一个位置,以此类推,每一轮确定一个相对于这一轮最小的数。

1.确定比较趟数

2.定义最小位置为i

3.分别将minPos的元素与i+~length-1之间的元素比较

4.如果有更小的将minPos赋值为当前元素的下标

5.交换元素值

img

img

		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,直到排序完成。

img

img

image-20210901213904748

		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.在时间效率上,选择排序优于冒泡排序。

吐槽

这里是吐槽部分,内容不限。