初始时,有序序列为R0,有序序列R0,然后依次插入R1,R2,…,Rn−1,由于每次插入都使得结果序列是有序,故叫插入排序,其实时间复杂度:O(∑i=0n−1i)=O(n2).
假定n=5,且输入序列为(5,4,3,2,1),每次插入后的情况如下:
i | [0] | [1] | [2] | [3] | [4] |
---|---|---|---|---|---|
- | 5 | 4 | 3 | 2 | 1 |
1 | 4 | 5 | 6 | 2 | 1 |
2 | 3 | 4 | 5 | 2 | 1 |
3 | 2 | 3 | 4 | 5 | 1 |
4 | 1 | 2 | 3 | 4 | 5 |
代码实现:
//插入排序
void insertion_sort(element list[],int n)
{
int i,j;
element next;
for(i=1;i<n;i++)
{
next=list[i];
//查找插入位置
for(j=i-1;j>=0&&next.key<list[j].key;j--)
{
list[j+1]=list[j];
}
list[j+1]=next;
}
}