插入排序分为三种:直接插入排序,折半插入和希尔排序算法,下面是三种排序算法的代码,代码中带有注释
直接插入排序
//直接插入排序
void InsertSort(SqList &L)//对顺序表L做直接插入排序
{
for(int i=2;i<=L.length;i++)
if(L.r[i].key<L.r[i-1].key)//"<",需将r[i]存入有序字表
{
L.r[0]=L.r[i];//将待插入的记录暂存到监视哨中
L.r[i]=L.r[i-1];//r[i-1]后移
int j;
for(j=i-2;L.r[0].key<L.r[j].key;--j)//从后向前寻找插入位置
L.r[j+1]=L.r[j];//记录逐个后移,直到找到插入位置
L.r[j+1]=L.r[0];//将r[0]即原r[i],正确位置插入到
}//if
}
//功能实现函数直接插入排序
void Insert_sort(SqList L,int n)
{
L.length=n;
for(int i=1;i<=L.length;i++)
printf("%d ",L.r[i].key);
printf("\n");
InsertSort(L);
for(int i=1;i<=L.length;i++)
printf("%d ",L.r[i].key);
}
折半插入排序