c语言的冒泡排序法与循环

#提问一个有关c语言冒泡排序法与循环的问题
#代码如下


#include

int main()
{
    int a[4]={0};
    int  i, j;
    int temp=0;
    scanf("%d,%d,%d,%d",&a[0],&a[1],&a[2],&a[3]);
    for (i = 0; i <= 3; i++)
    {
        for (j = 0; j <= 3; j++)
        {
            if (a[j] > a[j + 1])
                temp=a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
        }
    }

    for (i = 0;i<=3; i++)
    {

        printf("%d\t", a[i]);


    }




}

#输入1,9,4,12后会出现如下输出

img


#请教一下各位

望给个采纳哈,谢谢!
1、原因如下
把下面代码替换你的就可以了,你那里逻辑写的不对。。就是你j>=3,然后j+1=3+1=4,a[4]这里就超出数组范围了,所以就出现那个负数

for (j = i + 1; j <= 3; j++)
{
    if (a[i] > a[j])
    {
        temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
}

img

有什么问题吗

冒牌排序就写错了


    for (i = 0; i < len-1; i++)
    {
        for (j = 0; j <= len-1-i; j++)
        {
            if (a[j] > a[j + 1])
                temp=a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
        }


len是数组元素个数

纯粹你自己写错了,逻辑不对,你自己再看看

改动处见注释,供参考:

#include<stdio.h>
int main()
{
    int a[4]={0};
    int  i, j;
    int temp=0;

    scanf("%d,%d,%d,%d",&a[0],&a[1],&a[2],&a[3]);

    for (i = 0; i < 3; i++)   //for (i = 0; i <= 3; i++) 修改
    {
        for (j = 0; j < 3 - i; j++) //for (j = 0; j <= 3; j++) 修改
        {
            if (a[j] > a[j + 1])
            {  //修改  缺了一对{}
                temp=a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }  //修改  缺了一对{}
        }
    }
    for (i = 0;i<=3; i++)
    {
        printf("%d ", a[i]);
    }
    return 0;
}