注册 登录
编程论坛 C语言论坛

选择排序法:十个数按升序输出 为啥我的代码输出的不对

求学11 发布于 2020-05-12 19:50, 2570 次点击
#include<stdio.h>
int main()
{
    int a[10];
    int i,j,min;
    printf("输入十个数:\n");
    for(i=0;i<10;i++)
     {
      scanf("%d",&a[i]);
     }
     printf("\n");
     for(i=0;i<10;i++)
     {
         min=i;
         for(j=1;j<11;j++)
          {
              if(a[j]<a[i])
              min=j;
         }
        a[i]=a[min];     
     }
    printf("这十个数按升序排列为:\n");
    for(j=1;j<11;j++)
    {
    printf("%d",a[i]);
    printf("\n");
    }
    return 0;
}
8 回复
#2
求学112020-05-12 19:51
运行结果截图
只有本站会员才能查看附件,请 登录
#3
求学112020-05-12 19:51
#4
forever742020-05-12 20:25
首先,排序写的不对。
其次,下标用到了10,超界了。
#5
求学112020-05-12 20:32
回复 4楼 forever74
请问排序具体哪里错了呢 谢谢
#6
forever742020-05-12 20:36
a[i]=a[min];
那a[i]里面原来的内容不就没了么?
教材上论坛上选择也好冒泡也好都多的是啊。
#7
云团2020-05-13 00:07
程序代码:
#include<stdio.h>
int main()
{
    int a[10];
    int i,j,min;
    int t;        
    printf("输入十个数:\n");
    for(i=0;i<10;i++)
     {
      scanf("%d",&a[i]);
     }
     printf("\n");
     for(i=0;i<10;i++)
     {
         min=i;
         for(j=i+1;j<10;j++)   //数组越界,j的取值范围改回来
          {
              if(a[j]<a[i])
              min=j;
          }
        t=a[i];     //将最小的数与当前数交换
        a[i]=a[min];     
        a[min]=t;
     }
    printf("这十个数按升序排列为:\n");
    for(j=0;j<10;j++)
    {
    printf("%d",a[j]);   //将i改成j
    printf("\n");
    }
    return 0;
}

只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2020-5-13 00:09编辑过]

#8
求学112020-05-13 23:51
回复 6楼 forever74
谢谢指出 老是忽略这个问题谢谢了
#9
qing_yx2020-05-14 09:41
#include<stdio.h>
int main(void)
{
    int a[10];
    int i, j, min;
    printf("输入十个数:\n");
    for (i = 0; i<10; i++)
    {
        scanf("%d", &a[i]);
    }
    printf("\n");
   
    for (i = 0; i<10; i++)
    {
        min = i;
        for (j = i+1; j<10; j++)
        {
            if (a[j]<a[i])
                min = j;
        }
        if (min != i)
        {
            int temp = a[min];
            a[min] = a[i];
            a[i] = temp;
        }
    }
    printf("这十个数按升序排列为:\n");
    for (j = 0; j<10; j++)
    {
        printf("%d", a[j]);
        printf("\n");
    }
    return 0;
}
1