张修泉 发表于 2021-5-30 11:34:26

从大到小排序,为啥我的结果是错的

#include<stdio.h>
void main()
{
int a={15,34,6,27,48,4,20},i,j,k,t;
printf("排序前的数列:");
for(i=0;i<7;i++)
printf("%5d",a);
for(i=0;i<7;i++)
{ k=i;
for(j=i+1;j<7;j++)
if(a>a) k=j;
if(k!=i)t=a;a=a;a=t;}
printf("\n从大到小排序后(选择法)\n");
for(i=0;i<7;i++)
printf("%5d",a);
printf("\n");
}

阿悦爱吃蒜 发表于 2021-5-31 10:48:21

修改如下,供对照:
#include<stdio.h>
void main()
{
    int a={15,34,6,27,48,4,20},i,j,k,t;
    printf("排序前的数列:");
    for(i=0;i<7;i++)
      printf("%5d",a);
    for(i=0;i<7-1;i++)
    {
      k=i;
      for(j=i+1;j<7;j++)
         if(a>a) k=j;
      if(k!=i)
      {
         t   =a;
         a=a;
         a=t;
      }
    }
    printf("\n从大到小排序后(选择法)\n");
    for(i=0;i<7;i++)
      printf("%5d",a);
    printf("\n");
   
}

黄一 发表于 2021-6-1 07:34:59

把你的内层for循环里第二个if后交换的部分,三个语句加上花括号,那是个整体

if(k!=i){
t=a;a=a;a=t;
}
页: [1]
查看完整版本: 从大到小排序,为啥我的结果是错的