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);
}
插入算法排序
最新推荐文章于 2025-12-11 22:46:37 发布
这篇博客详细介绍了插入排序的原理和实现过程。通过一个Java方法展示了插入排序的逻辑,包括外层循环确保每一轮保证前n个元素有序,内层循环进行元素比较和交换。此外,还提供了换位方法和打印方法辅助排序和展示。
1万+

被折叠的 条评论
为什么被折叠?



