编辑代码

import java.util.Arrays;

class Main {
	public static void main(String[] args) {
        //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。
		int[] arr = {101,34,-1,88,134,119,1};
        insertSortUpgrade(arr);
	}
    //插入排序
    public static void insertSort(int[] arr){
        //使用逐步推导的方法来讲解,便于理解
        //第一轮 {101,34,119,1} => {34,101,119,1}
        //定义待插入的数
        int insertVal = arr[1];
        //待插入数的索引
        int insertIndex = 1 - 1; //即arr[1]的前面这个数的下标

        //给insertVal 找到插入的位置
        //insertVal < arr[insertIndex] 判断待插入的数,是否找到插入的位置
        //满足就需要将insertIndex-- 来达到向左移动
        while(insertIndex >= 0 && insertVal < arr[insertIndex]){ //保证在遍历的过程中不越界
            arr[insertIndex + 1] = arr[insertIndex]; //把前面大于当前的数移动到后面
            insertIndex--;//向前移动
        }
        //当退出while循环时,说明插入的位置找到,insertIndex + 1位置
        arr[insertIndex + 1] = insertVal;

        System.out.println("第一轮插入");
        System.out.println(Arrays.toString(arr));


        //第二轮 {34,101,119,1} => {34,101,119,1}
        //定义待插入的数
        //int insertVal = arr[2];
        //待插入数的索引
        //int insertIndex = 2 - 1; //即arr[1]的前面这个数的下标

        //给insertVal 找到插入的位置
        //insertVal < arr[insertIndex] 判断待插入的数,是否找到插入的位置
        //满足就需要将insertIndex-- 来达到向左移动
        while(insertIndex >= 0 && insertVal < arr[insertIndex]){ //保证在遍历的过程中不越界
            arr[insertIndex + 1] = arr[insertIndex]; //把前面大于当前的数移动到后面
            insertIndex--;//向前移动
        }
        //当退出while循环时,说明插入的位置找到,insertIndex + 1位置
        arr[insertIndex + 1] = insertVal;

        System.out.println("第二轮插入");
        System.out.println(Arrays.toString(arr));


        //第三轮 {34,101,119,1} => {34,101,119,1}
        //定义待插入的数
        //int insertVal = arr[3];
        //待插入数的索引
        //int insertIndex = 3 - 1; //即arr[1]的前面这个数的下标

        //给insertVal 找到插入的位置
        //insertVal < arr[insertIndex] 判断待插入的数,是否找到插入的位置
        //满足就需要将insertIndex-- 来达到向左移动
        while(insertIndex >= 0 && insertVal < arr[insertIndex]){ //保证在遍历的过程中不越界
            arr[insertIndex + 1] = arr[insertIndex]; //把前面大于当前的数移动到后面
            insertIndex--;//向前移动
        }
        //当退出while循环时,说明插入的位置找到,insertIndex + 1位置
        arr[insertIndex + 1] = insertVal;

        System.out.println("第三轮插入");
        System.out.println(Arrays.toString(arr));
    }

    public static void insertSortUpgrade(int[] arr){
        int insertVal,insertIndex;
        for(int i = 1;i < arr.length;i++){
            //使用逐步推导的方法来讲解,便于理解
            //第一轮 {101,34,119,1} => {34,101,119,1}
            //定义待插入的数
            insertVal = arr[i];
            //待插入数的索引
            insertIndex = i - 1; //即arr[1]的前面这个数的下标

            //给insertVal 找到插入的位置
            //insertVal < arr[insertIndex] 判断待插入的数,是否找到插入的位置
            //满足就需要将insertIndex-- 来达到向左移动
            while(insertIndex >= 0 && insertVal < arr[insertIndex]){ //保证在遍历的过程中不越界
                arr[insertIndex + 1] = arr[insertIndex]; //把前面大于当前的数移动到后面
                insertIndex--;//向前移动
            }
            //当退出while循环时,说明插入的位置找到,insertIndex + 1位置
            arr[insertIndex + 1] = insertVal;
            System.out.println("第"+i+"轮插入");
            System.out.println(Arrays.toString(arr));
        }
    }
}