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));
}
}
}