假设我们尝试实现一个合并排序算法,给定一个数组数组来合并什么是更好的方法,这个:
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>>() ;
}
}
或这个 :
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();
}
}
为了更清楚,我所做的是合并 a 中的每一对邻居并将生成的合并数组放入外部数组数组tmp,合并所有对后,一种方法是清除a然后将tmp移动到a,然后将清除的 a移动到tmp。第二种方法是“抛出”旧的tmp并获得一个新的tmp ,而不是重用旧的 tmp。