请问哪里又错了我运行感觉没毛病但是就说我错了,希望能在基础上改

img


#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");
}
}