c语言,排序问题,冒泡循环拿不到满分

img

img

img


使用了冒泡循环,从小到大排序,使得s[3]是四个数中最大的,但是只能达到五十分
第二种方法反而可以拿到100分
冒泡循环只能拿到五十分,为什么呢?

  • 你的冒泡是有问题的, i= 0, j = 3,s[j + 1] = s[4],s的下标范围 0~3, s[4] 出现了数组越界
// 从前往后冒泡
void sort1(int a[],int n)
{
    int i,j,t,noswap;
    for(i=0;i< n-1; i++)
    {
        noswap=1;
        for(j=0;j<n-1-i;j++)
            if(a[j+1]<a[j])
            {
                t=a[j+1];
                a[j+1]=a[j];
                a[j]=t;
                noswap=0;
            }
        if(noswap)  
            break;
    }
}

如有帮助,欢迎点赞+采纳哈!

我的理解是:题目让找最大值,用冒泡排序反而繁琐,增加了不必要的排序过程