这种排序尚硅谷的课程讲的很好,文字叙述和图片来自尚硅谷的笔记
视频地址
基本思想
把n个待排序的元素看成为一个有序表和一个无序表,开始时无序表中只包含一个元素,无序表中包含n-1个元素,排序过程中每次从无序表中取出第一个元素,把他的排序码依次与有序表元素的排序码进行比较,把它插入到有序表中的适当位置,使之成为新的有序表
代码实现
时间复杂度O(n²)
public static void insertSort(int[] arr) {
int insertVal = 0;
int insertIndex = 0;
for (int i =1;i<arr.length;i++){
insertVal = arr[i];
insertIndex = i-1;
while (insertIndex>=0&&insertVal<arr[insertIndex]){
arr[insertIndex+1] = arr[insertIndex];
insertIndex--;
}
if (insertIndex+1 != i){
arr[insertIndex+1] = insertVal;
}
System.out.println("第"+i+"轮排序结果为:"+ Arrays.toString(arr));
}
}
排序前数组为:[3, 9, -1, 10, -3]
第1轮排序结果为:[3, 9, -1, 10, -3]
第2轮排序结果为:[-1, 3, 9, 10, -3]
第3轮排序结果为:[-1, 3, 9, 10, -3]
第4轮排序结果为:[-3, -1, 3, 9, 10]
GitHub源码+时间测试
🔗链接