假设我们尝试实现合并排序算法,给定一个数组数组来合并什么是更好的方法,这个:
public void merge(ArrayList<ArrayList<E>> a) {
ArrayList<ArrayList<E>> tmp = new ArrayList<ArrayList<E>>() ;
while (a.size()>1) {
for (int i=1; i<a.size();i+=2) {
tmp.add(merge(a.get(i-1),a.get(i)));
}
if (a.size()%2==1) tmp.add(a.get(a.size()-1));
a = tmp;
tmp = new ArrayList<ArrayList<E>>() ;
}
}
Run Code Online (Sandbox Code Playgroud)
或这个 :
public void merge(ArrayList<ArrayList<E>> a) {
ArrayList<ArrayList<E>> tmp = new ArrayList<ArrayList<E>>(),tmp2 ;
while (a.size()>1) {
for (int i=1; i<a.size();i+=2) {
tmp.add(merge(a.get(i-1),a.get(i)));
}
if (a.size()%2==1) tmp.add(a.get(a.size()-1));
tmp2 = a;
a = tmp;
tmp = tmp2;
tmp.clear();
}
}
Run Code Online (Sandbox Code Playgroud)
这样可以很清楚,我在做什么,是要合并每对夫妇的邻居的一个,并把结果合并阵列,阵列的外部阵列TMP,合并所有的夫妇后,一种方法是清除一个,然后移动TMP来一个,然后将清除的a移动到tmp.第二种方法是"抛出"旧的tmp并获得一个新的tmp 而不是重用旧的tmp.
作为一般规则,不要花费精力去重用旧的收藏品; 它只会让你的代码更难阅读(并且经常不会给你任何实际的好处).如果您已经使用了代码,那么只尝试这样的优化,并且您有硬数字表示算法的速度得到了提高.
| 归档时间: |
|
| 查看次数: |
1171 次 |
| 最近记录: |