顾名思义, 直接插入排序就类似于我们打扑克牌时, 一边摸牌, 一边理牌。先拿第一张牌在手上, 再拿第二张牌时, 我们比较一下大小, 才知道是
把牌插入左边还是右边, 下面摸牌都是类似的了。
因此直接插入排序的过程为: 先将序列中的第一个记录看作是有序的子序列, 然后从第二个记录起逐个进行插入, 直至整个序列变为
按关键字递增的有序序列为止。
/**
* 对顺序表L作直接插入排序
*
*/
void InsertSort(SqList *L)
{
int i, j;
for (i = 2; i < L->length; i++)
{
if (L->r[i+1] < L->r[i])
{
L->r[0] = L->r[i]; // 哨兵
for (j=i-1; L->r[j] > L->r[0]; j--)
{
L->r[j+1] = L->r[j]; // 记录后移
}
L->r[j+1] = L->r[0]; // 插入
}
}
}