本帖最后由 马镱洵 于 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万次,那怎么办.
你的思维就建立在循环次数只有几次,那当然将变量定义在循环里自然没有什么性能上的问题了.
另外我不明白的是,将变量定义在方法中,怎么就提高了代码的耦合度了?怎么就损坏了代码的逻辑性了?怎么就易出错了?你的解释呢? |