归并排序

优点:所需时间和NlogN成正比

缺点:需要额外的内存用来存储辅助数组


/**
 * Created by Administrator on 2016/10/8.
 */
public class MergeSort {
    private static int copy[];


    /*
       原地归并
     */
    private static void merge(int[] a, int l, int m, int h) {
        int i = l, j = m + 1;//i,j分别为左右数组的第一个
        for (int k = l; k <= h; k++)
            copy[k] = a[k];
        for (int k = l; k <= h; k++) {
            if (i > m) a[k] = copy[j++];//左边取完
            else if (j > h) a[k] = copy[i++];//右边取完
            else if (copy[i] > copy[j]) a[k] = copy[j++];//右边最小 小于 左边最小
            else a[k] = copy[i++];//右边最小 大于 左边最小
        }
    }

    private static void mergeSort(int[] a, int l, int h) {
        int m = (l + h) / 2;
        if (h <= l) return;
        mergeSort(a, l, m);
        mergeSort(a, m + 1, h);
        merge(a, l, m, h);
    }

    private static void mergeSort(int[] a) {
        copy = new int[a.length];
        mergeSort(a,0,a.length-1);
    }

    public static void main(String[] args) {
        int[] a = {12,30,59,74,39,85,681,234,9444,55,46,39,1,69,2346,4545,55,31};
        mergeSort(a);
        for (int i : a)
            System.out.print(i + ", ");
    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Q:什么是归并排序?A:它是建立在归并操作上的一种有效的排序算法;是采用分治法的一个非常典型的应用;是一种稳定的 ...
    TinyDolphin阅读 2,980评论 5 4
  • 归并排序最吸引人的性质就是能够保证将任意长度为 N 的数组排序所需时间和 NLogN 成正比,它的主要缺点是所需的...
    ghwaphon阅读 585评论 0 7
  • 请尊重作者的劳动成果,如需转载请注明出处,谢谢! 如果觉得不错,可以关注我或者点赞,这就是你们对我最大的鼓励! 归...
    QiuZhiFeng阅读 934评论 0 4
  • 数据结构与算法--归并排序 归并排序 归并排序基于一种称为“归并”的简单操作。比如考试可能会分年级排名和班级排名,...
    sunhaiyu阅读 918评论 0 6
  • 感恩朋友今天请我们吃饭唱歌! 感恩宝宝活泼乖巧,大家唱歌他跟着摇头摆尾的跳舞,逗得大家哈哈笑,嘴还特甜,让喊什么就...
    无住生心1阅读 135评论 0 0