排序总排不对

来源:6-5 数组的应用(一)

qq_七月_63

2018-06-21 13:41

#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回答

  • qq_魚小苼_0
    2018-07-05 21:24:27

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

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


    慕运维474...

    这个解释真的很棒

    2018-07-27 10:50:41

    共 1 条回复 >

  • 清衫
    2018-06-22 21:56:02

    第一个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;

    给个最佳答案行不行呢~

C语言入门

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

926026 学习 · 20793 问题

查看课程

相似问题