新手守护
/*
插入排序: 插入排序:5
a[1] a[2] a[3] a[4]
1 4 7 3
前移:a[1]=a[2];即 a[w]=a[w+1];
后移:a[2]=a[1];即a[w+1]=a[w];
核心思想 :从第2个人到第n个人,开始插入排序i:2.3..<=n
x=a[i];保存a[i]
第1步:从后向前 j=i-1....>=1找第一个比x小的数(下标为k,有可能k=0);
第2步:后移:从i-1...=k+1>= a[w+1]=a[w];
插入到a[k+1]=x;
*/
#include<iostream>
using namespace std;
int a[1001],n;
void insert()
{ int i,j,k,w,x;
cin>>n;
cin>>a[1];//第1个数不需要排序
for(i=2;i<=n;i++)//从第2个人开始插入
{cin>>a[i];//先读入
x=a[i];//把当前要排序的a[i]保存
k=0;//!!当所有人都比你大,k下标为0
//第1步:从后向前找第一个比x小的数
for(j=i-1;j>=1;j--) //你前面一个到第一个
if(a[j]<x)
{ k=j; //记比你小的数下标位置
break;//提前结束
}
else continue;
//第2步:从i-1到k+1后移:假设i=10,k=1
for(w=i-1;w>=k+1;w--)//a[10]=a[9]..a[w+1=3]=a[w=2]
a[w+1]=a[w];
// 第3步:插入x
a[k+1]=x;
}//end for i
cout<<"排序后为:"<<endl;
for(i=1;i<=n;i++)
cout<<a[i]<<" ";
}
int main()
{ insert();
return 0;
}