递归进阶
递归形式进行插入排序
(1)
package recursion;
import java.util.Arrays;
/*
递归求解插入排序
问题分析:
等价于对数组的0-倒数第二个元素进行排序
然后再将最后一个元素插入到这个有序的数组
等价于对数组的0-倒数第三个数进行排序
然后再讲最后两个元素插入到这个有序数组
*/
public class InsetionSorting {
public static void main(String[] args) {
int arr[] = {5, 4, 3, 2, 1};
System.out.println(Arrays.toString(f1(arr, 1)));
}
static int[] f1(int arr[], int c) {
if (c == arr.length) {
return arr;
}
int a = arr[c];
if (arr[0] > a) {
for (int j = c - 1; j >= 0; j--) {
arr[j + 1] = arr[j];
}
arr[0] = a;
} else {
for (int i = c - 1; i >= 0; i--) {
if (arr[i] <= a) {
for (int j = c - 1; j > i; j--) {
arr[j + 1] = arr[j];
}
arr[i + 1] = a;
break;
}
}
}
return f1(arr, c + 1);
}
}
(2)
package recursion;
import java.util.Arrays;
public class InsertSorting2 {
public static void main(String[] args) {
int arr[] = {37,21,23,12,32,33,56};
f2(arr, 6);
System.out.println(Arrays.toString(arr));
}
static void f2(int []arr,int k){
if (k==0){
return;
}
f2(arr,k-1);
// if(k==1)
// System.out.println("sss");
int x=arr[k];
int index=k-1;
while(index>-1&&x<arr[index]){
arr[index+1]=arr[index];
index--;
}
arr[index+1]=x;
}
}