插入排序的原理和排序扑克牌的原理一样。假设有n张牌,手中的牌已经排好顺序,每次从桌上新拿一张牌。每拿到一张牌都需要从右往左将它与手中的牌进行比较。由于插入需要增加一个存储空间,因此可以用一个临时变量key存储当前从桌子上拿到的牌。代码如下
void insertion_sort(int a[], int n)
{
int i=0;
int j=1; // a[j]~a[n-1]的牌放在桌子上
int key;
for(j=1;j<=n-1;j++)//每次从桌子上取一张牌
{
i=j-1; //a[0]~a[i]为在手上的牌
key=a[j]; //保存a[j],因为后面a[j]会被覆盖
while( (a[i]>key) &&(i>=0))//从右往左比较手中的牌与key的大小
{
a[i+1]=a[i];//手中的牌向右移动一个空挡
--i;
}
a[i+1]=key;//将key插入空挡
}
}