直接插入排序:
算法流程
对待排序序列中的每个元素,按大小插入到答案序列中
答案序列 数组
开始时: [ ] [ 3,5,4,6,7]
第一步插入3,答案序列是空,直接放入
[3] [5,4,6,7]
第二步插入5,应该插入在3的后面
[3,5] [4,6,7]
第三步插入4,应该插入在3后面,5的前面
[3,4,5] [6,7]
对于a[i],应该插入到答案数组的第一个大于等于a[i]的位置,插入完成后即排序完成
时间复杂度:
考虑两个极端情况:
1.待排序数组是非递减的,也就是每次插入只需插入到最后一个位置,有n个数插入,插入a[i]时顺序查找插入位置的遍历长度i-1,时间复杂度是每个元素查找长度之和
2.待排序数组是非递增的,也就是每次插入需要插入到答案数组的第一个位置,此时查找长度为0,但需要将答案数组向后移动一个位置,对于插入a[i]时,移动次数应该是之前已经插入到序列的所有数,也就是需要移动i-1个元素,那么时间复杂度同上是
#include
#include
#include
#include