算法思想:
将序列A[1…n]看成一个有序表A[1…i-1]和一个无序表A[i…n]。初始时,有序表中只含有第一个元素,无序表中含n-1个元素。每次都取无序表的第一个元素A[i],将其插入到有序表A[1…i-1]的恰当位置,形成新的有序表,重复n-1次即可完成排序。
算法伪代码
INSERTION-SORT(A,n)
1. for j←2 to n
2. do key←A[j]
3. i←j-1
4. while i>0 and A[j]>key
5. do A[i+1]←A[i]
6. i←i-1
7. A[i+1]=key
算法时间复杂度的分析
对应行的代价 | 次数 |
---|---|
c1 | n |
c2 | n-1 |
c3 | n-1 |
c4 | ∑t(j) |
c5 | ∑(t(j)-1) |
c6 | ∑(t(j)-1) |
c7 | n-1 |
因此,T(n)=c1+c2+c3+c4+c5+c6+c7
对于同一序列而言,n固定,而t(j)大小会影响T(n)
若数组已经排好