本帖最后由 马镱洵 于 2012-9-3 08:06 编辑
寇龙飞 发表于 2012-9-3 07:35
哥们,你的函数没有实现排序功能哦。for (j = i; j > 0 && nums[j - 1] > nums[j]; j--)
i、j、temp可以 ...
老兄,我这代码排序绝对没有问题,希望你能先测试一下我的代码再提出疑问咯.
我把i j temp定义在方法里是有原因的,因为如果定义在for循环里的话,每次进入for循环的语句,都会增加不必要的在栈内存中开辟变量的系统资源,例如:- // 循环数组的长度次数,这个不用说了吧.
- for (int i = 0; i < nums.length; i++) {
- // 判断条件很简单,只要第一个开始遍历的元素的值大于0,
- // 并且数组中前面一个数大于后面一个数,就能实现快速排序了.
- for (int j = i; j > 0 && nums[j - 1] > nums[j]; j--) {
- // 交换数组元素的代码,大家都懂的.
- temp = nums[j];
- nums[j] = nums[j - 1];
- nums[j - 1] = temp;
- }
- }
复制代码 每次一开始执行内循环时,就会在栈空间开辟int变量,程序在栈空间开辟内存的这个过程,也是需要一点cpu资源的,这种资源的消耗根本是不必要的.
总结一下,如果只有一层循环语句,那就可以在for循环内部定义变量.
其实,把所有的变量定义在方法里,而不定义在循环内部,是一种好习惯.不仅省去了多余的确cpu资源的开销,而且在外部调用该方法直到该方法调用结束时,方法中所有的局部变量以及参数都会立刻被释放掉. |