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

这个地方还是有点不太懂

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

    {

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

        {

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

求大神来个详细解答过程  非常感谢

正在回答

5 回答

我刚开始也不明白,你实在不会的话就像我一样算算每次的结果就应该清楚了。

第二个for是内循环,外循环循环一次,内循环要好多次。

内循环是从第一个数比较,将最大值一步步转移到最后。每次转移到最后,再进行下一次外循环,但是每次循环都会少一个数(因为最大值放后面了),所以i--,到最后就排出来了,这样你懂了嘛?

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

你先把这个数组带进去运算一下会明朗很多,外循环执行一次,内循环要全部执行

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

  10个人,先让最高的排到队尾,相邻的两个人两两比较一次需要比较9次,最后一对比较的是arr【8】和arr【8+1】,所以里层循环的j<=i中i的初始值是8(在外层循环赋值),这样一轮比较下来最高的人会进入arr【9】。

  同理再比较第二轮会让次高的人排到arr【8】,需比较8次,则需要设置i--;以此类推最会让大者沉底,小者冒泡。

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

第一个for ,是指从头到尾比较完一趟的整个过程,第二个for ,就是讲 这一趟比较的具体步骤,就是两两相邻的数比较,i=8时,第一趟比较开始, j=0,就是说第一趟比较中的第一次,是比较第个2个数和第一个数,之间的大小,以此类推,直到比较完第9个数和第十个数,这时候第一趟大循环完成,也就比较出了最大的个数,这时候arr[9]的值就是最大的。再就开始第二趟比较,第二趟比较,就不需要带上arr[9]了,只有前9个数比较,所以i--,i=7, 第二趟的第二个for还是从头开始两两比较,最终可以得到arr[8],这个值是这次比较中的最大值。总共两趟循环下来了,得到了最大值,和第二大的值。后面的循环以此类推。。

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

慕瓜4445160

那每次的最大值跑到哪里去了?
2019-07-14 回复 有任何疑惑可以回复我~
#2

啊异人

谢谢你!我看到你这里我才懂的!
2019-09-01 回复 有任何疑惑可以回复我~

循环的嵌套,前面有提过,先外然后内,内循环完了在进行外循环

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

举报

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

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

进入课程

这个地方还是有点不太懂

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