插入排序是一种原地排序算法,即它的空间复杂度为o(1),原始插入排序的最坏(即原始序列的顺序刚好和我们所希望的顺序相反)和平均时间复杂度均为o(n*n),而在最好的情况下(即原始序列已经是按照我们所希望的顺序排好的序列)为o(n)。
下面的例子展示原始插入排序的整个过程:整个序列存放在数组中,按照从小到大的顺序进行排列。
8 2 4 9 3 6.//原始序列
从第二个元素开始,每个元素依次与其前面已经排好序的每个元素进行比较,直到找到正确的插入位置为止。
对于元素2(首先使用一个关键变量(key)存放它),它前面的8比它大,于是8往后移动,整个序列变成:
8 8 4 9 3 6
此时2前面的所有元素比较完毕,并使用key覆盖第一个8,于是序列变成:
2 8 4 9 3 6
对于元素4,4与8比较,8大于4,于是8往后移动,序列变成:
2 8 8 9 3 6
4再与2比较,2小于4,退出循环,4插入2 和8之间,于是用4覆盖第一个8,序列变成:
2 4 8 9 3 6
依次类推。实现的代码如下:
void InsertSort(int a[], int length)
{
if(NULL == a)
return;
if(length <= 0)
return;
for(int i =1; i < length; i++)
{
int key = a[i];
int j = i - 1;
while(j >= 0 &