2 jzx 606 jzx_606 于 2015.05.25 14:53 提问

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

#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
lzp_lrp   Ds   Rxr 2015.05.25 15: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 ;
}
lzp_lrp
lzp_lrp   Ds   Rxr 2015.05.25 15: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 ;
}
qq_17246605
qq_17246605   2015.05.25 17: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 ;
           }

代码风格丑丑的。。。

qq_17246605
qq_17246605 回复jzx_606: 嗯,还是丑丑的。。。
2 年多之前 回复
jzx_606
jzx_606 刚学的好不好
2 年多之前 回复
jzx_606
jzx_606 丑丑的。。。
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2015.05.25 15:13

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

gamefinity
gamefinity   Rxr 2015.05.25 15:19
  • 1. a[index]=t; a[index]=a[i]; a[i]=t; *你这个交换的结果是什么?t的值是哪里来的?
  • 2.你的j循环每次都从1开始,那么每次都是选出了最小的数(从1开始),所以每次选出的都是同一个数
a1193561652
a1193561652   Rxr 2015.05.25 15:29
                    a[index]=t;
                a[index]=a[i];
                a[i]=t;

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

u012271952
u012271952   2015.05.25 20:18

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

Csdn user default icon
上传中...
上传图片
插入图片