问答详情
源自:6-5 数组的应用(一)

请问下,为什么不是用for(j=9;j>=i;j--)

/*降序排列*/

   

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

    {

        for(j=9;j>i;j--)

        {

            if(score[j-1]<score[j])

            {

                jxpl=score[j];

                score[j]=score[j-1];

                score[j-1]=jxpl;

            }

        }

    }

    

    printf("%s","降序排列:");

    

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

    {

        if(i!=9)

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

        else

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

    }


为什么这里用 for(j=9;j>=i;j--) 得出的结果就不对呢?

提问者:小幸福10 2017-06-27 13:21

个回答

  • 為問椛暝
    2017-07-05 18:10:39

    for(i=0;i<=8;i--)  从这个式子中可以得到,score[]数组中有10 个元素  10个元素 9个空隙   需比较9次  

    这也是式子中 i<=8的缘由  所以 当你进行第一轮比较时 总共比较9次   如果写为for(j=9;j>=i;j--) 第一轮比较时i=0 在进行时 就比较啦10次  是错的  希望对你有帮助   我也刚学  如果我说错啦  请指正。

  • qq_唛子_04143018
    2017-06-27 23:04:07

    如果是 j=i 的话, 第一次循环, j 从 9 到 0 (因为 i = 0),

    而数组 score[j-1] 就会变为 score[-1] 发生越界