用冒泡排序让五个整数从小到大排序,这个代码哪里有问题?运行结果出错了

#include<stdio.h>
#define N 5
void main()
{ int a[N],i,j,t;
printf("input %d numbers:\n",N);
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N-1;i++)
for(j=0;j<N-1;j++)
if(a[j]>a[j+1])
{
t=a[j];a[j]=a[j+i];a[j+i]=t;}
printf("the sorted numbers:\n");
for(i=0;i<N;i++)
printf("%4d",a[i]);
printf("\n");
}

细节处理上的错误:

img

改正如下:

#include<stdio.h>
#define N 5

int main()
{ 
    int a[N],i,j,t;
    printf("input %d numbers:\n",N);
    for(i=0;i<N;i++)
    scanf("%d",&a[i]);
    for(i=0;i<N-1;i++)
        for(j=0;j<N-1-i;j++)
            if(a[j]>a[j+1])
            {t=a[j];a[j]=a[j+1];a[j+1]=t;}
    printf("the sorted numbers:\n");
    for(i=0;i<N;i++)
    printf("%4d",a[i]);
    printf("\n");
    return 0;
}

测试图:

img

如有帮助,还请帮忙点下采纳!感谢!

#include<stdio.h>
#define N 5
int main()
{ int a[N],i,j,t;
printf("input %d numbers:\n",N);
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(a[i]<a[j])
{
t=a[i];a[i]=a[j];a[j]=t;}
printf("the sorted numbers:\n");
for(i=0;i<N;i++)
printf("%4d",a[i]);
printf("\n");
return 0;
}


#include<stdio.h>
#define N 5
void main()
{ 
    int a[N],i,j,t;
    printf("input %d numbers:\n",N);
    for(i=0;i<N;i++)
        scanf("%d",&a[i]);

    for(i=0;i<N-1;i++)
        for(j=i+1;j<N;j++)//for(j=0;j<N-1;j++)
            if(a[i]>a[j])//if(a[j]>a[j+1])
            {
                //t=a[j];a[j]=a[j+i];a[j+i]=t;
                t=a[j];a[j]=a[i];a[i]=t;
            }

    printf("the sorted numbers:\n");
    for(i=0;i<N;i++)
        printf("%4d",a[i]);
    printf("\n");
}

#include<stdio.h>
#define N 5
void main()
{ int a[N],i,j,t;
printf("input %d numbers:\n",N);
for(i=0;i<N;i++)
scanf("%d",a+i);
for(i=0;i<N-1;i++)
for(j=0;j<N-i-1;j++)
if(a[j]>a[j+1])
{
t=a[j];a[j]=a[j+1];a[j+1]=t;}
printf("the sorted numbers:\n");
for(i=0;i<N;i++)
printf("%4d",a[i]);
printf("\n");
}