一维数组问题按个位数字大小排序

代码只相差了一个数组

#include
int main()
{
    int a[10];
    int b[10];
    int i,j;
    int temp;
    printf("请输入10个数字:");
    for (i = 0;i < 10;i++)
    {
        scanf("%d",&a[i]);
        b[i] = a[i] % 10; 
    }

    for (i = 0;i < 9;i++)
    {
        for (j = 0;j < 9 - i;j++)
        {
            if (b[j] > b[j+1])
        {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
        }
        }
    }
    for(i = 0;i < 10;i++)
    {
        printf("%d\t",a[i]);
    }
    
    return 0;
}

结果是:

img

正确答案是:

#include 
int main()
{
    int a[10];
    int i,j,t;
    printf("请输入十个两位正整数:\n");
    for (i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    for (i=0;i<9;i++)
    {
        for (j=0;j<9-i;j++)
        {
            if (a[j]%10>a[j+1]%10)    //利用冒泡排序,并改变if条件即可实现
        {
            t=a[j]; a[j]=a[j+1]; a[j+1]=t;      //若不熟悉多去看冒泡排序
        }
        }
    }
    for (i=0;i<10;i++)
    {
        printf("%d\t",a[i]);
    }
    return 0;
}


结果是:

img

数组b贮存个位的数字,用冒泡排序法后结果和答案不同,为什么添加了一个数组结果就不同。

 if (b[j] > b[j+1])
        {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
        }

这里你在交换a数组的同时,还要交换b数组的值才行啊

 if (b[j] > b[j+1])
        {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
                temp = b[j];
                b[j] = b[j+1];
                b[j+1] = temp;
        }