java数据结构和算法(MergeSort)

来源:互联网 发布:天然气软件收费系统 编辑:程序博客网 时间:2024/06/04 20:03
package cn.xyc.sort;import cn.xyc.sortBase.SortBase;import cn.xyc.sortUtil.GetDataUtil;/** *  * 描述:归并排序 *  * <pre> * HISTORY * **************************************************************************** *  ID   DATE           PERSON          REASON *  1    2016年9月18日        80002253         Create * **************************************************************************** * </pre> *  * @author 80002253 * @since 1.0 *//** *  * 描述:归并排序 <br/> * 简介:将两个(或两个以上)有序表合并成一个新的有序表 <br/> * 即把待排序序列分为若干个子序列,每个子序列是有序的。 <br/> * 然后再把有序子序列合并为整体有序序列 时间复杂度为O(nlogn) <br/> * 稳定排序方式 *  * <pre> * HISTORY * **************************************************************************** *  ID   DATE           PERSON          REASON *  1    2016年9月19日        80002253         Create * **************************************************************************** * </pre> *  * @author 80002253 * @since 1.0 */@SuppressWarnings("rawtypes")public class MergeSort extends SortBase {private static Comparable[] aux;// 临时容器/** * 二路合并 *  * @param a * @param lo * @param mid * @param hi */private static void merge(Comparable[] a, int lo, int mid, int hi) {// 将a[lo..hi]复制到aux[lo..hi]for (int i = lo; i <= hi; i++) {aux[i] = a[i];}// 将a[lo...mid]和a[mid+1...hi]归并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++];}}}/** * 升序排列 *  * @param a */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("归并排序使用的时间为:" + (e - s) + "ms");}private static void sortAsc(Comparable[] a, int lo, int hi) {if (hi <= lo)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
原创粉丝点击