一、递归
1.递归的介绍
- 以编程的角度来看,递归指的是方法定义中调用方法本身的现象
- 把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解
- 递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算
2.递归的基本使用
- 需求:求1-100之间的和
- 代码实现:
public class demo {
public static void main(String[] args) {
int sum = getSum(100);
System.out.println(sum);
}
private static int getSum(int i) {
if (i == 1) {
return 1;
} else {
return i + getSum(i - 1);
}
}
}
5050
3.递归的注意事项
- 递归一定要有出口,否则内存溢出
- 递归虽然有出口,但是递归的次数也不宜过多,否则内存溢出
二、快速排序
1.快速排序概述
快速排序算法中,每一次递归时以第一个数为基准数,找到数组中所有比基准数小的,再找到所有比基准数大的。
小的全部放左边,大的全部放右边,确定基准数的正确位置。
2.快速排序实例
- 核心步骤
- 从右开始找比基准数小的
- 从左开始找比基准数大的
- 交换两个值的位置
- 红色继续往左找,蓝色继续往右找,直到两个箭头指向同一个索引为止
- 基准数归位
- 代码实现:
public class demo {
public static void main(String[] args) {
int[] arr = {50,40,30,70,90,10};
quiteSort(arr, 0, arr.length - 1);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
private static void quiteSort(int[] arr, int left, int right) {
if (left > right) {
return;
}
int a = left;
int b = right;
int ss = arr[left];
while (a != b) {
while (arr[b] >= ss && b > a) {
b--;
}
while (arr[a] <= ss && b > a) {
a++;
}
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
int temp = arr[left];
arr[left] = arr[a];
arr[a] = temp;
quiteSort(arr, left, a - 1);
quiteSort(arr, a + 1, right);
}
}