用递归方法是在每一处进行分解,分解成两组,分别再去分解后进行归并,那么最终不断递归到分解为一个长度的数组,然后去合并,合同方法的同时就进行了比对。
今天提出的方法就是从最小的步长1开始,两两归并(归并的同时也进行了比较),然后再用步长2、步长4……逐渐进行归并,直到排序完成。
下面给出代码
package b.merge;
import java.util.Random;
import static b.merge.MergeSort.merge;
public class SplitAllMerge {
public static void sort(int [] ints){
int n = ints.length;
for(int sz = 1;sz < n;sz = sz + sz){
for(int lo = 0;lo < n - sz;lo += sz + sz){
//第一次先1个一组两两比对,第二次2个一组两两比对,第三次4个一组两两比对……
merge(ints,lo,lo+sz-1,Math.min(lo+sz+sz-1,n-1));
}
}
}
public static void main(String [] args){
int [] a = new int[20];
Random r = new Random();
for ( int i = 0;i < a.length;i++) a[i] = r.nextInt(200);
System.out.print("排序前:");
for(int outprint : a){
System.out.print(outprint + " ");
}
sort(a);
System.out.print("\n\r排序后:");
for(int outprint : a){
System.out.print(outprint + " ");
}
}
}
4505

被折叠的 条评论
为什么被折叠?



