package cn.xyc.sort;
import cn.xyc.sortBase.SortBase;
import cn.xyc.sortUtil.GenerateDataFileUtil;
import cn.xyc.sortUtil.GetDataUtil;
/**
*
* 描述:自低向上的归并排序
*
* <pre>
* HISTORY
* ****************************************************************************
* ID DATE PERSON REASON
* 1 2016年10月9日 80002253 Create
* ****************************************************************************
* </pre>
*
* @author 蒙奇·D·许
* @since 1.0
*/
@SuppressWarnings("rawtypes")
public class MergeSortBU extends SortBase {
private static Comparable[] aux;
private static void merge(Comparable[] a, int lo, int mid, int hi) {
// 复制数组
for (int k = lo; k <= hi; k++) {
aux[k] = a[k];
}
int i = lo;
int j = mid + 1;
for (int k = lo; k <= hi; k++) {
if (i > mid) {
a[k] = aux[j++];
} else if (j > hi) {
a[k] = aux[i++];
} else if (less(aux[j], aux[i])) {
a[k] = aux[j++];
} else {
a[k] = aux[i++];
}
}
}
public static void sortAsc(Comparable[] a) {
long s = System.currentTimeMillis();
int N = a.length - 1;
aux = new Comparable[N + 1];
// sz子数组的大小
for (int sz = 1; sz <= N; sz = sz + sz) {
// lo子数组的索引
// System.out.println("=============" + sz + "=============");
for (int lo = 0; lo <= N - sz; lo += sz + sz) {
merge(a, lo, lo + sz - 1, Math.min(lo + sz + sz - 1, N));
// System.out.println("merge(a," + lo + "," + (lo + sz - 1) +
// ","
// + Math.min(lo + sz + sz - 1, N) + ")");
}
}
long e = System.currentTimeMillis();
System.out.println("自底向上归并排序使用的时间为:" + (e - s) + "ms");
}
public static void main(String[] args) {
// GenerateDataFileUtil.generate("d:/user/80002253/桌面/a.txt", 1000000);
Comparable[] a = GetDataUtil.getData("d:/user/80002253/桌面/a.txt");
sortAsc(a);
a = GetDataUtil.getData("d:/user/80002253/桌面/a.txt");
MergeSort.sortAsc(a);
a = GetDataUtil.getData("d:/user/80002253/桌面/a.txt");
MergeSort2.sortAsc(a);
// show(data);
}
}
java数据结构和算法(MergeSortBU)
最新推荐文章于 2021-02-27 20:12:50 发布