第五题不懂我这样写为什么第一个循环出了问题,,只能交换一次。望给出答复,指出错误

img

#include<stdio.h>
int main()
{
int i,j,b;
int a[5]={8,6,5,4,1};
for (i=0;i<5;i++)
for(j=0;j<5-i;j++)
{if(a[i]>a[i+1])
{b=a[i];a[i]=a[i+1];a[i+1]=b;}}
for(i=0;i<5;i++)
printf("%d",a[i]);
printf("\n");
return 0;}

题目要求是逆序,不是比较大小,修改如下,供参考:

#include<stdio.h>
int main()
{
    int i, j, b;
    int a[5] = { 8,6,5,4,1 };
    j = sizeof(a) / sizeof(a[0]);
    for (i = 0; i < j/2; i++)
        //for (j = 0; j < 5 - i; j++)
        //{
        //    if (a[i] > a[i + 1])
            {
                b = a[i]; a[i] = a[j - i-1]; a[j - i-1] = b;
            }
        //}
    for (i = 0; i < j; i++)
        printf("%4d", a[i]);
    printf("\n");
    return 0;
}

for(j=0;j<5;j++)
搞不明白你就循环足够的次数,不要老想追求效率省几次