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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张吉日   /  2012-9-2 08:48  /  4092 人查看  /  24 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

马镱洵 发表于 2012-9-3 09:59
确实不是冒泡,不过我也知道这也不是正宗的快速排序,我也说不出来是什么排序,我就默认是另类快速排序好了, ...

好吧,你赢了,你那不是冒泡,我的是冒泡。
回复 使用道具 举报
本帖最后由 寇龙飞 于 2012-9-3 11:04 编辑
马镱洵 发表于 2012-9-3 08:01
老兄,我这代码排序绝对没有问题,希望你能先测试一下我的代码再提出疑问咯.
我把i j temp定义在方法里是有 ...

老兄,我这代码排序绝对没有问题,希望你能先测试一下我的代码再提出疑问咯.

测试啥,读了下就不是快速排序,懒得复制过去测试。你这就是一个稍微优化了点的的伪冒泡(并不一定比真正的冒泡快),有2个问题,实际运行中,1、新增变量temp浪费资源,2、交换赋值过程并没位运算效率高。




每次一开始执行内循环时,就会在栈空间开辟int变量,程序在栈空间开辟内存的这个过程,也是需要一点cpu资源的,这种资源的消耗根本是不必要的.

我在意的也是这一点cpu资源,抱歉的是,每次执行内循环后,这点资源就被释放了。我没必要放大它的生命周期,让其存在于整个方法中,浪费我的资源,并且提高代码耦合度、损坏我代码的逻辑性,极易出错、改bug时哥们就爽了。
回复 使用道具 举报
本帖最后由 马镱洵 于 2012-9-3 11:23 编辑
寇龙飞 发表于 2012-9-3 11:02
老兄,我这代码排序绝对没有问题,希望你能先测试一下我的代码再提出疑问咯.

测试啥,读了下就不是快速排 ...


"测试啥,读了下就不是快速排序,懒得复制过去测试。你这就是一个稍微优化了点的的伪冒泡(并不一定比真正的冒泡快),"

你挺有趣的.也不测试一下16的代码,就直接断定是伪冒泡了,真行.
还不一定比真正的冒泡快(是不是比真正的冒泡快,你试一下不就知道了吗.有句话叫做光说不练是嘴把式.),我就直接告诉你答案吧.在我的机器上,随机产生20000个int型数据放进一个int型数组中,然后调用我写的"快速排序"方法,测试结果是用时300多毫秒,和插入排序的效率差不多.但是如果是调用真正的冒泡排序,测试结果是1000多毫秒.你要不信,自己就将16楼的代码放进你的eclipse中,然后多试几次,自然就有答案了.
不想多说了,我代码都发出来,你还要来争,我只好表示无可奈何了,如果只是来斗嘴,而不用代码来说事儿的话,那我只好绕道了,因为我惹不起.



"1、新增变量temp浪费资源,2、交换赋值过程并没位运算效率高。"

没错啊,用位运算方式来交换数组的元素,速度确定是最快.但是本贴从始至终都没有谁在争论用temp变量的速度快,还是用位运算的速度快啊,不知道你为什么要跟我说这个,我感觉莫明其妙的.



"我在意的也是这一点cpu资源,抱歉的是,每次执行内循环后,这点资源就被释放了。我没必要放大它的生命周期,让其存在于整个方法中,浪费我的资源,并且提高代码耦合度、损坏我代码的逻辑性,极易出错。"

OK,人各有志,你有你的理解,我不说你的代码好与不好.
我只想说,如果内循环每次都开辟新的空间,循环结束后又释放空间,这开辟与释放的过程,又多浪费了不少cpu资源了,假如内循环是循环1万次呢?这开辟与释放的过程所浪费的cpu资源岂不要连续浪费10000次?你说这10000次浪费的cpu资源少不少?又假如内循环是百万次呢?
将变量定义在方法中,循环结束后,方法也很快就结束,方法一结束,所开辟的temp变量自然就被释放.简单点说,从方法调用到方法结束,一共也就开辟了一次i,j和temp变量.将变量定义在循环中,又假如外循环和内循环的次数都很大呢,都10万次,那怎么办.
你的思维就建立在循环次数只有几次,那当然将变量定义在循环里自然没有什么性能上的问题了.
另外我不明白的是,将变量定义在方法中,怎么就提高了代码的耦合度了?怎么就损坏了代码的逻辑性了?怎么就易出错了?你的解释呢?

点评

。。。。不跟你较真了。  发表于 2012-9-3 11:36
回复 使用道具 举报
寇龙飞 发表于 2012-9-3 11:02
老兄,我这代码排序绝对没有问题,希望你能先测试一下我的代码再提出疑问咯.

测试啥,读了下就不是快速排序 ...

技术上的东西有了分歧,本来就少不要辩论,但是这个辩论不能只是口头争论,而不自己去测试.我欢迎并鼓励所有java爱好者对技术问题进行探讨和辨认,这也是提高实力的一种步骤.
假如你对我前面几贴的回复有什么技术上的质疑,大可以提出来,我从来不会因为辩论输了而觉得没有面子.
同时我也希望对方能摆正心态,切实面向技术问题,而不是面向面子.

点评

这种技术上的探讨,我更加倾向于查资料、面对面交流等效率更高的方式。论坛适合点到为止。 文字词不达意、误解,不多说了。你几期?面谈讨论吧  发表于 2012-9-3 14:04
越往下争论,牵扯到的其他知识越多,新的分歧增加。论坛这种文字形式的讨论,讨论某一个点还行。像咱两这种较真下去,三天三夜都不够。  发表于 2012-9-3 13:59
回复 使用道具 举报
寇龙飞 发表于 2012-9-3 11:02
老兄,我这代码排序绝对没有问题,希望你能先测试一下我的代码再提出疑问咯.

测试啥,读了下就不是快速排序 ...

"越往下争论,牵扯到的其他知识越多,新的分歧增加。论坛这种文字形式的讨论,讨论某一个点还行。像咱两这种较真下去,三天三夜都不够。"

你的意思是,你还是认为我的那个排序方法是伪冒泡方法吗?怎么,你试过了那个方法的效率了吗?假如你还是认为我的那个是伪冒泡方法,那么我就要请问了:
测试20000个数据的排序,真正的冒泡方法用时1000多毫秒,而我写的那个方法用时不到400毫秒,请问您是认为真正的冒泡排序与你口中的"伪冒泡排序"用时差不多,还是相差很多?这一点非常重要.
如果你想说,虽然我的排序方法比真正的冒泡排序方法用时要少很多,但是你还是坚定的认为我的排序方法就是伪冒泡方法或者另类冒泡排序方法,那你当我什么也没有问就是了,我只好无语了.
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马