r[0]有两个作用:一是进入查找插入位置的循环之前,暂存了r[i]的值,使得不至于因记录的后移而丢失r[i]的内容;二是查找插入位置的循环中充当观察哨
#include<stdio.h>
#include <iostream>
#include<iomanip>
using namespace std;
void InsertSort(int r[],int n)
{
for (int i=2;i<=n;i++)
{
r[0]=r[i];
for(int j=i-1;r[0]<r[j];j--)
{
r[j+1]=r[j];
}
r[j+1]=r[0];
}
}
void main(){
int m[]={0,1,8,5,84,52,34,15,87,65,46};
InsertSort(m,11);
for(int i=1;i<11;i++)
cout<<m[i]<<setw(4);
cout<<endl;
}
运行结果:
时间复杂度:最好O(n),最坏O(n^2)
平均时间复杂度:O(n^2)
提示:插入排序一半和快速排序结合使用,这样相对高效,因为插入排序相对于相对有序的序列,排序的时间复杂度接近最好的时间复杂度O(n)