先让第一个数自成数组,然后让第二个数加入到这个数组当中,按照大小排序,然后是第三个,第四个数,循环直到所有的数遍历完成,注意边界条件,迭代的时候从下标为1的数开始,每迭代一次,下标都加1,注意数组越界和边界问题
public static void insertSort(int[] arr) {
for (int i = 1 ; i < arr.length ; i++){
int insertVal = arr[i];
int insertIndex = i - 1;//即arr[1]前面这个数的下标
//给insertValue找到插入的位置
//1.说明 :insertIndex >= 0保证数组不越界
//2.insertVal <arr[insertIndex] 说明待插入的数,还没有找到插入的位置
//3.就需要将arr[insertIndex]后移
while (insertIndex >= 0 && insertVal < arr[insertIndex]) {
//{101,34,119,1} -> {101,101,119,1};
arr[insertIndex + 1] = arr[insertIndex];
insertIndex--;
}
//当退出时说明找到了插入位置
//这里判断是否需要赋值
if (insertIndex + 1 != i){
arr[++insertIndex] = insertVal;
}
System.out.println("第" + i + "轮插入");
System.out.println(Arrays.toString(arr));
}
}
与选择排序的区别
选择是假定第一个为最小,然后每轮循环都是与后面的进行比较
插入是让第一个自成数组,后面的数组往进插入 时间上不如选择快