插入排序原理:从数组下标1开始排序,每次取一个数插入有序集合。
举例:有一个数组 {9,3,7,2,5,8,1,4};
第一次排序:从数组下标1开始排序,把 3 用一个临时变量保存起来 比如 int var = 3;
拿着 3 去和 9 比较 9 大于 3 那么, 9 的位置发送改变,{ ,9,7,2,5,8,1,4}3放到下标为0的位置
排序后代码:{3,9,7,2,5,8,1,4}
------------------------------------------------------------------------------------------------------------
第二次排序:从数组下标2开始排序,把 7 用一个临时变量保存起来 比如 int var = 7;
9 大于 7 ,9的下标位置后移一位,{3, ,9,7,2,5,8,1,4}
然后再拿3和7比较,3不动,排序后代码:{3,7,9,2,5,8,1,4}
------------------------------------------------------------------------------------------------------------
第三次排序:从数组下标3开始排序,把 2 用一个临时变量保存起来 比如 int var = 2;
9大于2,9的下标后移为{3,7, ,9,5,8,1,4}
7大于2,7的下标也后移为{3, ,7,9,5,8,1,4}
3大于2,3的下标后移为{ ,3,7,9,5,8,1,4}
最后把2填入下标0为{2,3,7,9,5,8,1,4}
---------------------------------------------------------------------------------------------------------------
累了不写了
代码实现,定义一个方法名为insertSort(int[] arr)
public static int[] insertSort(int[] arr) {
//外循环执行控制执行次数
for(int i = 1 ;i < arr.length ;i++) {
int var = arr[i]; //记录临时变量等会插入要使用
int len = i - 1; //while循环退出条件,也是比较大小的条件
while( len >= 0) {
if(arr[len] > var) {
arr[len+1] = arr[len];//下标后移
} else {
break; //退出,减少代码运行次数
}
len--; //
}
arr[len+1] = var; //插入对应的位置
}
}