算法原理
- 首先将数组中的数据分为2个区间,即已排序区间和未排序区间;
- 初始已排序区间只有一个元素,就是数组的第一个元素;
- 取未排序区间的元素,插入已排序区间中合适的位置,并保持已排序区间一直有序;
- 重复这个过程,直到未排序中元素为空;
性能分析
- 最小时间复杂度:当数据完全有序时,只需进行遍历一次插入操作,时间复杂度为O(n);
- 最大时间复杂度:当数据完全逆序时,每次插入时都需要搬移所有的已排序区间数据,时间复杂度为O(n^2);
- 平均时间复杂度:每次插入的平均时间复杂度为O(n),但是需要插入n次,所以平均复杂度是O(n^2);
- 空间复杂度:插入排序算法不需要额外的存储空间,故而空间复杂度为O(1),为原地排序算法;
- 算法稳定性:我们可以在未排序区间中相同数值的数放到已排序区间中相同数的后面,就可以保持算法稳定,因此插入排序算法是稳定的;