黑马程序员技术交流社区

标题: 选择排序中的问题。。。 [打印本页]

作者: 黑马任雪刚    时间: 2012-6-8 15:34
标题: 选择排序中的问题。。。

class A()
{
public static void selectSort(int[] arr)
{
  
  for(int x = 0;x<arr.length-1;x++)
  {
   for(int y = x+1;y<arr.length;y++)
   {
    if(arr[x]>arr[y])
    {
     int temp = arr[x];
     arr[x] = arr[y];
     arr[y] = temp;
    }
   }
  }
}
}


class B()
{
public static void selectSort(int[] arr)
{
  int temp = 0;//把temp变量声明在for循环外面是不是可以优化一下代码呢??????
  for(int x = 0;x<arr.length-1;x++)
  {
   for(int y = x+1;y<arr.length;y++)
   {
    if(arr[x]>arr[y])
    {
     temp = arr[x];
     arr[x] = arr[y];
     arr[y] = temp;
    }
   }
  }
}
}

作者: 唐志兵    时间: 2012-6-8 15:38
是优化了代码,因为java中每个变量的创建都会push进堆栈中,这样肯定占用了cpu了。你把它放外面就只push了一次, 所以说还是优化了的。
作者: 葛奎    时间: 2012-6-8 15:55
是优化了
1, 定义在里面:因为for循环的控制下,每 int 下都会进行进栈动作等一系列的内部操作  
2, 定义在外面:定义好的外部变量,已经在栈中存在。for循环的控制下,就会自动找到存在的temp对它进行操作了。
3, 2相对于1,只进行了一次进栈动作,省去了重复的进栈操作  所以是优化的
作者: 郑传庆    时间: 2012-6-8 16:27
是可以优化,而且是用来计算结果的话,是必须放到for循环外的,如果放在for循环中,每循环一次就要重新创建一次,而且还重置了temp的值,计算出来值就会跟预想的结果有偏差。我们在用循环的时候,特别得注意,是否可以在循环中定义变量,这样做可能会造成什么样的结果。这个是值得我们注意的。
作者: 赵兵锋    时间: 2012-6-9 12:08
那还不如不要这个temp了,
用a=a^b;
b=a^b;
a=a^b;的方式
作者: 邓杰    时间: 2012-6-9 15:09
这个嘛。个人认为 temp定义在外面是不好的。这里的temp只是一个临时变量,在被使用后就没有了存在的意思,如果定义在外面temp则会一直存在,而定义在里在运行完后就会释放掉。因此定义在里对于内存来讲会更优化一点;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2