快速排序:
public class MySort {
int [] arr = {1,2,55,7,78,32};
public void quick(int low,int high){
int lo = low;//第一轮指针
int hi = high;
if (lo>=high) {//指针重合
return;
}
boolean flag = false;
while (lo<hi) {
if(arr[lo]<arr[hi]) {
int temp = arr[lo];
arr[lo] = arr[hi];
arr[hi] = temp;
flag = !flag;//控制指针交换
}
if(flag){
lo++;
}else{
hi--;
}
}
lo--;hi++;//第二轮指针位置
quick(low,lo);//尾递归+二分 第一个个数组
quick(hi,high);//第二个数组
}
public void show() {
for(int i = 0;i<arr.length;i++) {
System.out.print(arr[i]+"===");
}
System.out.println();
}
public static void main(String [] args) {
MySort ms = new MySort();
ms.show();//开始排序
ms.quick(0,5);
ms.show();
}
}
递归:
//递归
public class MyMonth{
public void printMonth(int month) {
System.out.println(month);
if (month < 12) {
printMonth(month+1);
}
}
public static void main(String [] args) {
MyMonth mm = new MyMonth();
mm.printMonth(1);
}
}
尾递归:
相较于递归:
节省内存
1.不能有返回
2.不能调用方法时进行计算
//尾递归
public class MyMonth{
public void printMonth(int month) {
System.out.println(month);
if (month < 12) {
month++
printMonth(month);//不能有返回 不能调用方法时进行计算
}
}
public static void main(String [] args) {
MyMonth mm = new MyMonth();
mm.printMonth(1);
}
}