为了账号安全,请及时绑定邮箱和手机立即绑定

排序总排不对

#include <stdio.h>

int main()

{

int nl[]={2,5,3,1,8};

int i,j;

    printf("****************排序前********************\n") ;

for(i=0;i<5;i++) 

{

   if(i!=4)

        printf("%d",nl[i]);

else

printf("%d",nl[i]);

}

    for(i=5; i>=0; i--)

    {

    for(j=0;j<5;j++)

    {

    if(nl[j]>nl[j+1])

    {

    int temp;

    temp=nl[i];

    nl[i]=nl[i+1];

    nl[i+1]=temp;

    }

   }

    }

    printf("****************排序后********************\n");

for(i=0;i<5;i++) 

{

if(i!=4)

        printf("%d",nl[i]);

else

printf("%d",nl[i]);

}

return 0;

}

   这个哪有问题呢  排序不对

正在回答

2 回答

因为冒泡法的每一次排序实际上都是把最大(或最小)的一个排到最后(或最前),也就是所谓的升序降序。

所以外层循环用于控制冒泡后剩下数的个数,比如八个数我们排了最大的放在了后面,第二次就在前七个数里面排出最大的,依次这样到最后一个数。而内层循环则是用来给相领两个数做比较的,本题是把大的数放在后面。当我们排了一个最大数后,第二次排剩下的最大数就不再使用它了,因此内层循环的次数是不是应该小于等于外层循环的剩下的待排序的数的个数呢?在代码中也就是 j<=i;了。


5 回复 有任何疑惑可以回复我~
#1

慕运维4747063

这个解释真的很棒
2018-07-27 回复 有任何疑惑可以回复我~

第一个for循环里i=5,改为i=3,

往下看,

把j<5改为j<=i,

再接着往下看,

 temp=nl[i];

    nl[i]=nl[i+1];

    nl[i+1]=temp;

改为

 temp=nl[j];

    nl[i]=nl[j+1];

    nl[j+1]=temp;

给个最佳答案行不行呢~

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926022    人
  • 解答问题       20793    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

排序总排不对

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信