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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© rolling-stone 中级黑马   /  2014-7-31 23:53  /  2207 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我这里有两个版本的冒泡排序的问题
第一个是我自己写的,没问题,可以实现排序.
第二个是毕老师写的,没问题,可以实现排序。
但是仔细想,毕老师写的比我写的要少了几次判断,我的写的有的时候多了几次判断.
我写的版本.
  1. class Sort()
  2. {
  3.         public void BubbleSort(int[] arr)
  4.         {
  5.                 for(int i=0; i<arr.length; i++)
  6.                 {
  7.                         for(int j=0; j<arr.length-1; j++)
  8.                         {
  9.                                 if(arr[j]>arr[j+1])
  10.                                 {
  11.                                         int temp = arr[j+1];
  12.                                         arr[j+1] = arr[j];
  13.                                         arr[j] = temp;
  14.                                 }
  15.                         }
  16.                 }
  17.         }
  18. }
复制代码
毕老师的版本:
  1. class Sort()
  2. {
  3.         public void BubbleSort(int[] arr)
  4.         {
  5.                 for(int i=0; i<arr.length-1; i++)
  6.                 {
  7.                         for(int j=0; j<arr.length-x-1; j++)
  8.                         {
  9.                                 if(arr[j]>arr[j+1])
  10.                                 {
  11.                                         int temp = arr[j+1];
  12.                                         arr[j+1] = arr[j];
  13.                                         arr[j] = temp;
  14.                                 }
  15.                         }
  16.                 }
  17.         }
  18. }
复制代码
显然后面的版本效率更高,但是有一个疑问就是,这个效率也不会体现的很清晰啊,是不是现在的数组还不够长的原因啊?




17 个回复

倒序浏览
额。。。。。。。。。。。。。。。
回复 使用道具 举报
止询初衷 发表于 2014-7-31 23:54
额。。。。。。。。。。。。。。。

大哥,不用发这么水的帖子吧,哈哈!
回复 使用道具 举报
for(int j=0; j<arr.length-1; j++)
已经排好序的你再比较有意义么?
回复 使用道具 举报
多比了几次而已,以现在CPU的速度来说,基本上没有影响……
回复 使用道具 举报

这是内层的循环,目的是比较相邻的两个元素的大小,外层循环目的是从头再比一遍,这样不断地比较,就会把最大值一直向后推,最小值一直向前推,看不出有什么问题啊?
回复 使用道具 举报
rolling-stone 发表于 2014-8-1 00:07
这是内层的循环,目的是比较相邻的两个元素的大小,外层循环目的是从头再比一遍,这样不断地比较,就会把 ...

比完一次你已经知道最后面的是最大的了,下一次比较的时候比到那前一个够了。再下一次再前一个。这样不是减少比较的次数了
回复 使用道具 举报
辻方慑 来自手机 中级黑马 2014-8-1 00:17:47
8#
毕老师的更简洁
回复 使用道具 举报
不用纠结这个。从算法角度来说,冒泡排序没有任何显著的可优化之处,纯粹拿来练练手。所以,只要你的代码能得到正确的结果就好
回复 使用道具 举报
顶一下 ~~~~~~~~~~~
回复 使用道具 举报
科篮 发表于 2014-8-1 00:11
比完一次你已经知道最后面的是最大的了,下一次比较的时候比到那前一个够了。再下一次再前一个。这样不是 ...

哦,大神,谢谢,我知道了,太感谢了!
回复 使用道具 举报
fantacyleo 发表于 2014-8-1 00:20
不用纠结这个。从算法角度来说,冒泡排序没有任何显著的可优化之处,纯粹拿来练练手。所以,只要你的代码能 ...

哦,好滴,那以后再开发的时候,关于算法方面是不是要求也不是很高了,大神.
回复 使用道具 举报
lz   你仔细想一想就会发现其中的不同之处。首先我想说的是你copy毕老师的代码中 for(int j=0; j<arr.length-x-1; j++)这个代码是不是写错了,应该是 for(int j=0; j<arr.length-i-1; j++)才对。
  其次,你在想想,你写的代码中是循环的n的平方次。(也就是数组的长度的平方次)
                   而毕老师的循环次数在内循环中每次都少一次。也就少比较一次。所以毕老师的效率高点。
回复 使用道具 举报
fantacyleo 发表于 2014-8-1 00:20
不用纠结这个。从算法角度来说,冒泡排序没有任何显著的可优化之处,纯粹拿来练练手。所以,只要你的代码能 ...

被你发现了!就是面试和练习才用用
回复 使用道具 举报
rolling-stone 发表于 2014-8-1 08:54
哦,好滴,那以后再开发的时候,关于算法方面是不是要求也不是很高了,大神. ...

嗯,我没从事过实际开发,但从黑马的课程设置上来看,应该不太重要,倒不是说不会碰到复杂一些的算法,只是大多有别人写好的函数库或类库可以直接用,不用自己去实现。我看到一些比较资深的程序员博客,大意是说不管哪门语言,对程序员的基本要求是把该语言标准库中集合框架那些容器增删改查的算法效率搞明白,知道哪种场合用哪种容器
回复 使用道具 举报
既然选择了冒泡排序还考虑什么算法

点评

哈哈!  发表于 2014-8-1 10:49
回复 使用道具 举报
fantacyleo 发表于 2014-8-1 10:33
嗯,我没从事过实际开发,但从黑马的课程设置上来看,应该不太重要,倒不是说不会碰到复杂一些的算法,只 ...

好的,谢谢,大神。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马