基本介绍
插入排序的原理和我们在玩斗地主的时候给扑克牌排序的道理很像。
排序过程详解
原始数组 3 5 4 2 1
第一轮遍历
拿出arr[1] 和arr[0] 比较发现 5 > 3 插入到原来自己的位置
第二轮遍历
拿出arr[2] 和arr[0] ,arr[1] 比较发现 4 > 3 并且 4<5 插入到 arr[0]和arr[1]中间,所以arr[1]向后移动
一位,arr[2] 插入到arr[1]
第三轮遍历
拿出arr[3] 和arr[0] ,arr[1] ,arr[2] 比较发现 2 ❤️ 应该插入到 arr[0],所以arr[0~2]向后移动
一位,arr[3] 插入到arr[0]
第四轮遍历
拿出arr[4] 和arr[0] ,arr[1] ,arr[2] ,arr[3]比较发现 1 <2 应该插入到 arr[0],所以arr[0~3]向后移动
一位,arr[4] 插入到arr[0]
代码
public static void sort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
//要插入的元素
int val = arr[i];
//默认插入的位置
int j = 0;
//找出要插入的位置
for(j = i-1;j>=0;j--) {
if(arr[j]>val) {
arr[j+1]=arr[j];
}else {
break;
}
}
//注意y--
//插入
arr[j+1] = val;
}
}
public static void sort2(int[] arr) {
for (int i = 1; i < arr.length; i++) {
//要插入的元素
int insertvalue = arr[i];
//要插入的下标
int insertIndex = i-1;
//循环遍历 如果有比它大的就后移一位
while(insertIndex>=0&&insertvalue<arr[insertIndex]) {
arr[insertIndex+1] = arr[insertIndex];
insertIndex-- ;
}
//如果 insertIndex+1 == i 证明没有找到比它大的
if(insertIndex+1!=i) {
//插入
arr[insertIndex +1] = insertvalue;
}
}
}