#include<stdio.h>
int main(void)
{
int i,n,t,a[3000],m,q,p,sum;
scanf("%d",&p);
for(q=1;q<=p;q++)
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sum=0;
for(i=1;i<n;i++)
{
sum=sum+1;
if(a[i]<a[i-1])
{
m=a[i];
for(t=i-1;t>=0;t--)
{
if(t<i-1)
{
sum=sum+1;
}
if(a[t]<m)
{
break;
}
a[t+1]=a[t];
}
a[t+1]=m;
}
}
printf("%d\n",sum);
for(i=0;i<n-1;i++)
{
printf("%d ",a[i]);
}
printf("%d\n",a[i]);
}
}
模拟一遍 如输入样例 3 2 4 5;
i=1;a[1]<a[0]->2<3成立,m=a[1]=2;
for中t=0,t<i-1不满足,a[t]=a[0]=3<m,不满足,a[1]=a[0],跳出for;
a[t+1]=a[1]=m;a[1]=a[0]=2
没有a[0]等于多少,a[0]没变
我修改了一点 我的比较和他输出的不一样,比如 3 2 4 5,我比较了6次,先是比较三次 将最大的放在最后,再比较两次,将第二大的放在第三个,
再比较最后一次将第三大的放在第二位,最后输出
#include<stdio.h>
int main(void)
{
int i,n,a[3000],m,q,t,sum;
scanf("%d",&t);
for(q=1;q<=t;q++)
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sum=0;
for(i=0;i<n;i++)
{
for(q=1;q<n-i;q++)
{
if(a[q]<a[q-1])
{
m=a[q];
a[q]=a[q-1];
a[q-1]=m;
}
sum++;
}
}
printf("%d\n",sum);
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
}