#include<iostream>
using namespace std;
int main()
{
int n,i,j,k;
cin >> n;
int a[n+5];
for(i=1;i<=n;i++) cin >> a[i];//输入
for(i=2;i<=n;i++){
//如果未排序的比已排序的最大的那个数要小
//例如括号内的是已排序的(13,38,49,65,76,97)27,
//这里就是97比27要大,需要排序
if(a[i]<a[i-1])
{
a[0]=a[i];//把要排序的那个27保存起来
a[i]=a[i-1];//27的位置放置97这个数字,此时的情况是(13,38,49,65,76,97),97
for(j=i-2;a[0]<a[j];j--)//全部往后移,为要插入的数腾出空间,最后是(13,38,38,49,65,76),97
a[j+1]=a[j];
a[j+1]=a[0];//把暂存的27放到第一个38的位置
}
for(int k=1;k<=n;k++) cout << a[k] << " ";
cout << endl;
}
return 0;
}
下面是不看书自己打的菜鸟版本,时间复杂度达到了O(n3)
#include<iostream>
using namespace std;
int main()
{
int n,i,j,k;
cin >> n;
int a[n+5];
for(i=1;i<=n;i++) cin >> a[i];
for(i=2;i<=n;i++)
{
for(j=1;j<i;j++)
{
if(a[i]<a[j])
{
int temp=a[i];
for(k=i;k>j;k--)
a[k]=a[k-1];
a[j]=temp;
break;
}
}
}
for(int t=1;t<=n;t++) cout << a[t] << " ";
return 0;
}