基本介绍
把 n 个待排序的元素看成一个有序表和一个无序表,开始时有序表只有一个值,无序表有 n-1 个值,每次排序从无序表取出元素与有序表进行比对,插入适当位置成为新的有序表。
核心思想
把 n 个待排序的元素看成一个有序表和一个无序表,从无序列表取数据与有序列表对比并插入合适的位置
时间复杂度
| 排序法 | 平均时间 | 最差情形 | 稳定度 | 额外空间 | 备注 |
|---|---|---|---|---|---|
| 插入 | O(n2n^{2}n2) | O(n2n^{2}n2) | 稳定 | O(1) | 大部分排好序时较好 |
动画演示

代码思路
使用 for 循环变量 i 作为待插元素,j = i-1 作为有序列表最后一个值,while 循环比较 arr[i] 和 arr[j]的值,若 arr[j] 比待插元素大,则把 arr[j] 的值后移动一位,j - -,最后,待插元素= arr[j+1]
代码实现
/**
* @author tianhuiwen
* @date 2020/7/16 17:32
*/
public class InsertionSort {
public static void main(String[] args) {
int[] array = {3, 9, -10, 5, 10, 20, 6};
insertionSort(array);
System.out.println(Arrays.toString(array));
}
public static void insertionSort(int[] array) {
int insertNum;
for (int i = 1; i < array.length; i++) {
insertNum = array[i];
int j = i - 1;
while (j >= 0 && insertNum < array[j]) {
array[j + 1] = array[j];
j--;
}
array[j + 1] = insertNum;
}
}
}
本文详细介绍了插入排序算法的基本原理,包括其核心思想、时间复杂度、稳定性及空间复杂度。通过动画演示和代码实现,深入浅出地讲解了如何将无序表中的元素逐一插入到已排序的有序表中,确保每次插入后列表仍然有序。特别强调了当大部分元素已排序时,插入排序的表现较好。
1万+

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



