思路是:每次从未排好的序列中选出第一个元素插入到已排好的序列中。
步骤可以大致归纳如下:
1. 从未排好的序列中拿出首元素,并把它赋值给temp变量;
2. 从排好的序列中,依次与temp进行比较,如果元素比temp大,则将元素后移(实际上放置temp的元素位置已经空出)
3. 直到找到一个元素比temp小, 将temp放入该位置;
时间复杂度:o(n^2)
代码:
#include<stdio.h>
void main()
{
int A[6] = { 5, 2, 4, 6, 1, 3 };
int i, j, key;
for (j = 1; j<6; j++)
{
key = A[j];//从右侧牌堆中抓一张key牌,key牌即手中抓的将要插入的牌
i = j - 1;//与key牌左侧第一张牌比较
while ((i >= 0) && (A[i]>key))//一直比较,将较小的牌移至左侧
{
A[i + 1] = A[i];
i = i - 1;
}//key牌此时一直在手中,未插入
A[i + 1] = key;//插入key牌
}
for (i = 0; i < 6; i++)
{
printf("%d\n", A[i]);
}
}