java数据结构和算法(MergeSort2)

来源:互联网 发布:天然气软件收费系统 编辑:程序博客网 时间:2024/05/23 13:45
package cn.xyc.sort;import cn.xyc.sortBase.SortBase;import cn.xyc.sortUtil.GetDataUtil;/** *  * 描述:归并排序,对小于15的数组采用插入排序 *  * <pre> * HISTORY * **************************************************************************** *  ID   DATE           PERSON          REASON *  1    2016年10月9日        80002253         Create * **************************************************************************** * </pre> *  * @author 蒙奇·D·许 * @since 1.0 */@SuppressWarnings("rawtypes")public class MergeSort2 extends SortBase {private static Comparable[] aux;private static int limit = 15;// 长度超过的使用插入排序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();aux = new Comparable[a.length];sortAsc(a, 0, a.length - 1);long e = System.currentTimeMillis();System.out.println("归并2排序使用的时间为:" + (e - s) + "ms");}private static void sortAsc(Comparable[] a, int lo, int hi) {if (hi <= lo)return;if (hi - lo <= limit) {for (int i = lo; i <= hi; i++) {// i为未排序的元素,默认0位元素已经排序完成// 遍历的是已经排序完成的部分Comparable temp = a[i];int ins = i;for (int j = i - 1; j >= lo && less(temp, a[j]); j--) {// 移动位置为temp腾出空位a[j + 1] = a[j];ins = j;}// 在ins出插入元素if (ins != i) {a[ins] = temp;}}return;}int mid = lo + (hi - lo) / 2;// 将左半边排序sortAsc(a, lo, mid);// 将右半边排序sortAsc(a, mid + 1, hi);merge(a, lo, mid, hi);}public static void main(String[] args) {Comparable[] data = GetDataUtil.getData("d:/user/80002253/桌面/a.txt");sortAsc(data);show(data);}}

0 0