为啥排序后会多出来一个数?


#include<stdio.h>
int main()
{
    int a[3]={1,4,80};
    int j,i,t,m;
    printf("input a number:");
    scanf("%d",&m);  //输入m 
    int b[4]={1,4,80,m};
     
          for(i=0;i<4;i++)
    {
        printf(" %d",b[i]);
    } 
    printf("\n");
    printf("排序前b[0]=%d,b[1]=%d\n",b[0],b[1]); 

    for(i=0;i<4;i++)
    {
        for(j=0;j<4-i;j++)
        {
            if(b[j]>b[j+1])
            {
                t=b[j];
                b[j]=b[j+1];
                b[j+1]=t;
            }
        }
    }
    
    printf("排序后b[0]=%d,b[1]=%d\n",b[0],b[1]); 
    
        
    for(i=0;i<4;i++)
    {
        printf("%5d",b[i]);
    }
     printf("\n");
    for(i=0;i<5;i++)
    {
        printf("%5d",b[i]);
    }
    return 0;
}

img

1.改成 j<4-i-1 你这里多循环了一次。

img

2.应该是j<4

img

因为你多输出了一个, 索引越界了, 这个80是某个内存单元里面的数