jzx_606
jzx_606
2015-05-25 06:53
采纳率: 81.8%
浏览 1.6k
已采纳

麻烦看看这个程序为什么不能选择排序

#include
int main(void){
int n,a[10],i,j,t,index;

printf("Input n: ");
scanf("%d",&n);

for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    for (i=0;i<n;i++){
        index=i;
        for(j=1;j<n;j++){
            if (a[j]<a[index])
                index=j;
                a[index]=t;
                a[index]=a[i];
                a[i]=t;}}

                printf("After:");
                for (i=0;i<n;i++)

                printf("%d",&a[i]);
                return 0 ;}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • lzp_lrp
    WorldMobile 2015-05-25 07:24
    已采纳

    代码应该为以下

     #include
    int main(void)
    {
        int n,a[10],i,j,t,index;
        printf("Input n: ");
        scanf("%d",&n);
    
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
    
        for (i=0;i<n;i++)
        {
            index=i;
            for(j=1;j<n;j++){
                if (a[j]<a[index])
                {
                    index=j;
                    a[index]=t;
                    a[index]=a[i];
                    a[i]=t;
                }
            }
        }
    
        printf("After:");
        for (i=0;i<n;i++)
        printf("%d",&a[i]);
        return 0 ;
    }
    
    点赞 评论
  • caozhy

    if (a[j]<a[index])
    后面缺少花括号

    点赞 评论
  • gamefinity
    知常曰明 2015-05-25 07:19
    • 1. a[index]=t; a[index]=a[i]; a[i]=t; *你这个交换的结果是什么?t的值是哪里来的?
    • 2.你的j循环每次都从1开始,那么每次都是选出了最小的数(从1开始),所以每次选出的都是同一个数
    点赞 评论
  • lzp_lrp
    WorldMobile 2015-05-25 07:27

    试了试,代码还有问题,改成这个试试

     #include
    int main(void)
    {
        int n,a[10],i,j,t;
        printf("Input n: ");
        scanf("%d",&n);
    
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
    
        for (i=0;i<n;i++)
        {
            for(j=i+1;j<n;j++){
                if (a[j]<a[i])
                {
                    t=a[i]
                    a[i]=a[j];
                    a[j]=t;
                }
            }
        }
    
        printf("After:");
        for (i=0;i<n;i++)
        printf("%d",&a[i]);
        return 0 ;
    }
    
    点赞 评论
  • a1193561652
    纵横车 2015-05-25 07:29
                        a[index]=t;
                    a[index]=a[i];
                    a[i]=t;
    

    这部分交换两个变量的错了,第一行应该是t=a[index]
    最后的printf("%d",&a[i]);你应该是想输出a[i]吧,不要加"&"。

    点赞 评论
  • qq_17246605
    薇酱 2015-05-25 09:16

    CSDN首答,不知道为什么你的代码给我一种不太像选择排序的感觉,选择排序不是选出当前候选集最小(大)的数,然后交换么?

    #include
    int main(void){
    int n,a[10],i,j,t,index;
    printf("Input n: ");
    scanf("%d",&n);

    for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    for (i=0;i<n;i++){
    index=i;
    for(j=i+1;j<n;j++){//下标号是随i值而浮动的
    if (a[j]<a[index])
    index=j;
    }//找出当前最小数的下标
    if(index!=i)//如果和i不等,则交换
    {
    t=a[index];
    a[index]=a[i];
    a[i]=t;

    }
    }

                printf("After:");
                for (i=0;i<n;i++)
    
                printf("%d ",a[i]);//多加一个空格,增强可读性,去掉& 
                return 0 ;
               }
    

    代码风格丑丑的。。。

    点赞 评论
  • u012271952
    浪前青山 2015-05-25 12:18

    选择排序是最基础的排序,是需要熟练掌握的。http://c.biancheng.net/cpp/html/2442.html

    点赞 评论

相关推荐