public static void insertion(int []arr){
// 判断数组是否为空 或者长度小于2 以上条件没有排序的意义
if (arr == null || arr.length < 2){
return;
}
/*
插入排序原理是 :
第一轮保证前两个有序 第一轮索引位置 0 : 1相比较 如果 0 < 1 就把0与1的位置互换
第二轮保证前三个有序 第二轮索引位置 1 : 2相比较 如果 1 < 2 就把1与2的位置互换 再与0的位置比较如果0 > 2就换
第n轮 n - 1 : n -2 如果 n - 1 < n -2就向左边进行换位 直到左边没有数了 或者左边的数要大
*/
// i 从 1开始 arr.length -1结束
for (int i = 1; i < arr.length ; i++){
// j = i - 1 也就是i前面一位数 然后相比较必须满足 arr[j] < arr[j + 1] 且j >= o才执行换位
// int [] arr = {5,4,2,1,3};
// 第一轮: 4,5,2,1,3 i = 1 j = 0 因为j > i 所以j与i的位置互换 再次循环 发现j--已经小于0终止循环
// 第二轮: 第一次 4,2,5,1,3 因为j > i j与i的位置互换 再次循环j--等于0 继续循环
//第二次 2,4,5,1,3 因为j > i j与i的位置互换 发现j--已经小于0终止循环
// 第n轮:n - 1 : n - 2 如果 n - 1 < n -2就向左边进行换位 直到循环 j < 0或者比左边的数大 终止循环
for (int j = i - 1; arr[j] > arr[j + 1] && j >= 0; j--){
// 调用换位的方法
transposition(arr,j,j+1);
}
}
}
// 换位方法
public static void transposition(int [] arr ,int j,int i){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
// 打印方法
public static void print(int [] arr ){
for (int i = 0; i < arr.length; i++){
System.out.print(arr[i]+ " ");
}
}
public static void main(String[] args) {
// 创建一条无序的数组
int [] arr = {5,4,2,1,3};
// 调用排序方法
insertion(arr);
// 调用打印方法 打印排序后的数组
print(arr);
}