原问题:对数组的0-倒数第一个元素排序
缩小规模:对数组的0-倒数第二个元素,这部分排序
然后把最后一个元素插入到这个有序的部分中
import java.util.Arrays;
public class Main {
public static void main(String[] args){
int arr[]= {9,6,5,8,4,7,1,3,2};
insertSort(arr,8);
System.out.print(Arrays.toString(arr));//1,2,3,4,5,6,7,8,9
}
public static void insertSort(int []arr,int k) {
//递归出口
if(k==0)
return;
//对前k-1个元素排序
insertSort(arr,k-1);
//把位置k的元素插入到前面的部分
int x=arr[k];
int index=k-1;
while(index>-1&&x<arr[index]) {//小的往前插
arr[index+1]=arr[index];
index--;
}
arr[index+1]=x;
}
}
//等价转换
//对数组0-倒数第一个元素排序-等价于-对数组的部分排序-
//等价于-对数组的0-倒数第二个元素,这部分排序,然后把最后一个元素的插入到这个有序序列
//在重复中找变化,在变化中找重复