黑马程序员技术交流社区

标题: 冒泡排序的外层循环控制的是什么? [打印本页]

作者: 任振铭    时间: 2015-9-30 22:24
标题: 冒泡排序的外层循环控制的是什么?
想不通,谁来说说
作者: 豆豆的小幸福    时间: 2015-10-1 00:38
(一般按升序法排)冒泡法第一步,从数组的首元素开始,相邻的元素相互比较,如果左边元素比右边元素大,则相互调换,第一轮互换后,数组的最后一个元素肯定是最大的,这是第一轮。假设第一轮比较N次,然后还是从第一个元素开始进行相邻元素比较,第二轮肯定是比较N-1次,依次类推,直到第一个元素和第二个元素比较完,冒泡排序结束。            【这样可以知道双层for循环的外循环是控制比较了几轮,二内循环则是每轮比较的次数。】                     希望能帮到你。
作者: 任振铭    时间: 2015-10-1 10:49
豆豆的小幸福 发表于 2015-10-1 00:38
(一般按升序法排)冒泡法第一步,从数组的首元素开始,相邻的元素相互比较,如果左边元素比右边元素大,则 ...

你说的很对,每次比较的次数都比上一次减少一次,这个我理解,我看毕老师 的视频上写冒泡排序时内外循环是这样写的for(int i = 0;i<arr.length-1;i++){
           for(int j =0 ;j<arr.length-i-1;j++){
           }
      }
内层循环我理解,我不明白的就是为什么i的取值要小于arr.length-1,你能具体说下吗?
作者: ll5353231    时间: 2015-10-1 11:00
呵呵  当然要-1啊  不然 怎么行
作者: 豆豆的小幸福    时间: 2015-10-1 23:37
任振铭 发表于 2015-10-1 10:49
你说的很对,每次比较的次数都比上一次减少一次,这个我理解,我看毕老师 的视频上写冒泡排序时内外循环是这 ...

假如数组中有a个int型元素,那么到冒泡排序完结束,直观上总得比较了a-1轮即是arr.length-1轮,但是上面我说了,冒泡排序到只剩第一个与第二个元素比较就可以结束了,因为最后一轮是数组首元素自己与自己的比较,这样做没什么意义,那么实际是进行a-2轮即arr.length-2轮就可以完成冒泡排序了。所以循环中判断条件写成      i < arr.length-1。
作者: 任振铭    时间: 2015-10-2 20:40
ll5353231 发表于 2015-10-1 11:00
呵呵  当然要-1啊  不然 怎么行


作者: 任振铭    时间: 2015-10-2 20:42
豆豆的小幸福 发表于 2015-10-1 23:37
假如数组中有a个int型元素,那么到冒泡排序完结束,直观上总得比较了a-1轮即是arr.length-1轮,但是上面 ...

说的真是太好了,谢谢你
作者: 斯文阿昊    时间: 2015-10-2 21:37
楼上把我想说的都说了
作者: 向阳啊    时间: 2015-10-2 22:01
arr.lenggth-1   主要是防止角标越界。。。感觉楼主角标这块没搞明白........
作者: 任振铭    时间: 2015-10-2 23:12
斯文阿昊 发表于 2015-10-2 21:37
楼上把我想说的都说了

哈哈.......
作者: 迷茫不堪的年纪    时间: 2015-10-2 23:22
int i = 0;i<arr.length-1;i++    我觉得arr.length-1的在于一个最大值的,因为冒泡最后的就是最大的,小于这个主要是担心角标越界
作者: 任振铭    时间: 2015-10-3 18:06
迷茫不堪的年纪 发表于 2015-10-2 23:22
int i = 0;i

今天又看了一下视频,确实是为了防止越界,假如冒泡排序的数字有n个,则第一次需要比较的次数就是n-1,以后每次比较的次数自减1,也就是说最多比较次数是arr.length-1
作者: 神马才是黑马    时间: 2015-10-3 23:57
表示循环该事物的第一个入口循环
作者: 猫是点点    时间: 2015-10-4 00:40
内层控制的是相邻两个元素的比较。外层你可以想像当为0时,最终的结果是找出第一个极值,排在最后,那么外层为1时,找出的是第二个极值排在最后。。这样想是不是好点
作者: ruyang    时间: 2015-10-4 01:06
现在我都还不是很懂呢
作者: smile的程序猿    时间: 2015-10-4 08:21
毕老师视频说的很详细的
作者: 任振铭    时间: 2015-10-4 10:24
神马才是黑马 发表于 2015-10-3 23:57
表示循环该事物的第一个入口循环

{:5_292:
作者: 任振铭    时间: 2015-10-4 10:25
猫是点点 发表于 2015-10-4 00:40
内层控制的是相邻两个元素的比较。外层你可以想像当为0时,最终的结果是找出第一个极值,排在最后,那么外 ...

我看挺好
作者: 任振铭    时间: 2015-10-4 10:26
smile的程序猿 发表于 2015-10-4 08:21
毕老师视频说的很详细的

多谢多谢
作者: 任振铭    时间: 2015-10-4 10:28
ruyang 发表于 2015-10-4 01:06
现在我都还不是很懂呢

不懂可以一起学
作者: 迷茫不堪的年纪    时间: 2015-10-6 23:54
任振铭 发表于 2015-10-3 18:06
今天又看了一下视频,确实是为了防止越界,假如冒泡排序的数字有n个,则第一次需要比较的次数就是n-1,以后 ...

恩, 假设人最多活80岁,那么80就是最大值咯,  arr.length-1 咯
作者: 任振铭    时间: 2015-10-7 22:28
迷茫不堪的年纪 发表于 2015-10-6 23:54
恩, 假设人最多活80岁,那么80就是最大值咯,  arr.length-1 咯


作者: 迷茫不堪的年纪    时间: 2015-10-7 23:06
任振铭 发表于 2015-10-7 22:28

呵呵, 还不睡啊。
作者: 任振铭    时间: 2015-10-7 23:12
迷茫不堪的年纪 发表于 2015-10-7 23:06
呵呵, 还不睡啊。

还早,今天的东西还没搞完
作者: 迷茫不堪的年纪    时间: 2015-10-7 23:17
任振铭 发表于 2015-10-7 23:12
还早,今天的东西还没搞完

自己看, 还是进班了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2