A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

想不通,谁来说说

25 个回复

倒序浏览
(一般按升序法排)冒泡法第一步,从数组的首元素开始,相邻的元素相互比较,如果左边元素比右边元素大,则相互调换,第一轮互换后,数组的最后一个元素肯定是最大的,这是第一轮。假设第一轮比较N次,然后还是从第一个元素开始进行相邻元素比较,第二轮肯定是比较N-1次,依次类推,直到第一个元素和第二个元素比较完,冒泡排序结束。            【这样可以知道双层for循环的外循环是控制比较了几轮,二内循环则是每轮比较的次数。】                     希望能帮到你。
回复 使用道具 举报
豆豆的小幸福 发表于 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,你能具体说下吗?
回复 使用道具 举报
呵呵  当然要-1啊  不然 怎么行
回复 使用道具 举报
任振铭 发表于 2015-10-1 10:49
你说的很对,每次比较的次数都比上一次减少一次,这个我理解,我看毕老师 的视频上写冒泡排序时内外循环是这 ...

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

回复 使用道具 举报
豆豆的小幸福 发表于 2015-10-1 23:37
假如数组中有a个int型元素,那么到冒泡排序完结束,直观上总得比较了a-1轮即是arr.length-1轮,但是上面 ...

说的真是太好了,谢谢你
回复 使用道具 举报
楼上把我想说的都说了
回复 使用道具 举报
arr.lenggth-1   主要是防止角标越界。。。感觉楼主角标这块没搞明白........
回复 使用道具 举报
斯文阿昊 发表于 2015-10-2 21:37
楼上把我想说的都说了

哈哈.......
回复 使用道具 举报
int i = 0;i<arr.length-1;i++    我觉得arr.length-1的在于一个最大值的,因为冒泡最后的就是最大的,小于这个主要是担心角标越界
回复 使用道具 举报

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

{:5_292:
回复 使用道具 举报
猫是点点 发表于 2015-10-4 00:40
内层控制的是相邻两个元素的比较。外层你可以想像当为0时,最终的结果是找出第一个极值,排在最后,那么外 ...

我看挺好
回复 使用道具 举报
smile的程序猿 发表于 2015-10-4 08:21
毕老师视频说的很详细的

多谢多谢
回复 使用道具 举报
ruyang 发表于 2015-10-4 01:06
现在我都还不是很懂呢

不懂可以一起学

点评

大神指导哈  发表于 2015-10-5 00:39
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马