举个例子:
0 1 2 3 4 5
8 3 1 5 2 1//将a[0]看成已经排好序的,a[1]与a[0]作比较,若a[0]大于a[1]则交换,再把a[0]与a[1]看作排好序的跟下一个比较,以此类推
3 8 1 5 2 1
1 3 8 5 2 1
1 3 5 8 2 1
1 2 3 5 8 1
1 1 2 3 5 8
1、将开头元素视作已排序
2、执行下述处理,直至未排序部分消失
取出未排序部分的开头元素赋给变量V
在已排序部分,将所有比v大的元素向后移一个单位
将已取出的元素v插入空位
3、插入排序算法十分稳定
#include<stdio.h>
int main()
{
int n,a[100],i,j,v,z;
while(scanf("%d",&n))
{
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<n;i++)
{
v=a[i];
j=i-1;
while(j>=0&&a[j]>v)
{
a[j+1]=a[j];
j--;
}
a[j+1]=v;
for(z=0;z<n;z++)
{
if(z>0) printf(" ");
printf("%d",a[z]);
}
printf("\n");
}
}
return 0;
}