用选择排序法对任意10个整数由大到小排序

用选择排序法对任意10个整数由大到小排序
我这是哪里错了?

#include 

int main()
{
    int a[11], i, j, t, max;
    for (i = 1; i < 11; i++)
    {
        scanf("%d", &a[i]);
    }
    printf("\n");
    for (i = 1; i < 10; i++)
    {
        max = i;
        for (j = i + 1; j < 11; j++)
            if (a[j] > a[max])
                max = j;
        t = a[i];
        a[i] = a[max];
        a[max] = t;
        printf("The sorted numbers:\n");
        for (i = 1; i < 11; i++)
        {
            printf("%4d", a[i]);
        }
        printf("\n");
    }
}

17-19行代码同第16行都要放到if的作用域内,如:


#include <stdio.h>
 
int main()
{
    int a[11], i, j, t, max;
    for (i = 1; i < 11; i++)
    {
        scanf("%d", &a[i]);
    }
    printf("\n");
    for (i = 1; i < 10; i++)
    {
        max = i;
        for (j = i + 1; j < 11; j++)
            if (a[j] > a[max]){
                max = j;
                t = a[i];
                a[i] = a[max];
                a[max] = t;
              }
    printf("The sorted numbers:\n");
    for (i = 1; i < 11; i++)
    {
        printf("%4d", a[i]);
    }
    printf("\n");
  }
}
 

img


这个地方一旦找到比目标值大的数不应该交换嘛,目前写的代码只会交换最后一个j位置的值,也就是说这里少了括号

每次排序后输出这里, printf("The sorted numbers:\n"); for (i = 1; i < 11; i++) 循环自变量与最外层的循环自变量重复了,修改如下,供参考:

#include <stdio.h>
int main()
{
    int a[11], i, j, t, max;
    for (i = 1; i < 11; i++)
    {
        scanf("%d", &a[i]);
    }
    printf("\n");
    for (i = 1; i < 10; i++)
    {
        max = i;
        for (j = i + 1; j < 11; j++)
            if (a[j] > a[max])
                max = j;
        t = a[i];
        a[i] = a[max];
        a[max] = t;

        printf("The sorted numbers:\n");
        for (j = 1; j < 11; j++) //for (i = 1; i < 11; i++) 修改
        {
            printf("%4d", a[j]); //printf("%4d", a[i]);    修改
        }
        printf("\n");
    }
    return 0;
}