归并排序

原创 2016年08月31日 16:25:47
package Sort;

import java.util.Random;

public class Merge_Sort {
    final static int inf = Integer.MAX_VALUE;
    public static void main(String[] args) {
        //初始化数组
        int [] a = new int [1000];
        for(int i =0;i<a.length;i++){
            a[i] = new Random().nextInt(1000);
        }
        //排序前
        for(int i = 0;i< a.length;i++){
            if(i%20==0){
                System.out.println();
            }
            System.out.print(a[i]+" ");
        }
        System.out.println("\n");
        //调用归并排序算法
        Merge_sort(a,0,a.length-1);
        //排序后
        for(int i = 0;i<a.length;i++){
            if(i%20==0){
                System.out.println();
            }
            System.out.print(a[i]+" ");
        }
    }
    //归并排序
    public static void Merge_sort(int []A, int p, int r){
        if(p < r){
            int q = (p+r)/2;
            Merge_sort(A, p, q);//排序[p,q]
            Merge_sort(A, q+1, r);//排序[q+1,r]
            MERGE(A, p, q, r);//合并[p,q][q+1,r]数组
        }
    }
    //数组合并操作
    public static void MERGE(int []A, int p, int q, int r){
        int n1 = q-p+1;
        int n2 = r-q;
        int[]L = new int[n1+1];
        int[]R = new int[n2+1];
        //L数组 R数组赋值
        for(int i=0;i< n1;i++){
            L[i] = A[p+i];
        }
        for(int j = 0;j< n2;j++){
            R[j] = A[q+j+1];
        }
        //哨兵
        L[n1] = inf;
        R[n2] = inf;
        int i = 0;
        int j = 0;
        //合并数组并排序
        for(int k = p; k <= r; k++){
            if(L[i]<=R[j]){
                A[k] = L[i];
                i++;
            }else{
                A[k] = R[j];
                j++;
            }
        }
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

归并排序 图解算法过程

归并排序,图解,详细过程。
  • collonn
  • collonn
  • 2013年12月26日 14:09
  • 7650

白话经典算法系列之五 归并排序的实现(讲的真好)

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较...
  • yuehailin
  • yuehailin
  • 2017年04月03日 16:25
  • 14559

算法 - 归并排序(C#)

/* * MergeSorter.cs - by Chimomo * * 归并排序是建立在归并操作上的排序算法,该算法是分而治之策略(Divide and Conquer)的一个非常典型的应用...
  • chimomo
  • chimomo
  • 2014年12月03日 17:28
  • 2488

算法系列(四)排序算法中篇--归并排序和快速排序

在算法系列(三)排序算法上篇 一文中,介绍了冒泡排序,插入排序和选择排序算法。这篇文章继续讲解排序算法。 概述 冒泡排序,插入排序和选择排序算法这些算法的时间复杂度都是O(N^2),是否有更高效的排序...
  • robertcpp
  • robertcpp
  • 2016年05月30日 23:04
  • 3139

php实现归并排序

php实现归并排序: 这个排序我看了很久,大多数代码是从百度上看到的,因为我也是一个php的菜菜的,不过觉得应该把思路写下来,一方面是自己要总结一下,一方面是自己把思路写出来如果有哪里不对的地方也希...
  • liwuqi123456
  • liwuqi123456
  • 2016年01月17日 22:33
  • 387

外排序(磁盘排序)之多路归并排序的简单实现

摘要:本文简要介绍了当数据量大到不适合在内存中排序时,利用磁盘进行排序的多路归并算法。 关键字:外排序,磁盘排序,多路归并           下面以一个包含很多个整数的大文件为例,来说明多路归并...
  • qisefengzheng
  • qisefengzheng
  • 2015年05月26日 15:31
  • 630

数据结构——归并排序算法

昨天说了快速排序,今天来讲一讲归并排序:什么是归并?归并:将两个或两个以上的有序表组合成一个新有序表。归并操作的步骤: 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 设定两个指...
  • u013271921
  • u013271921
  • 2015年05月26日 14:33
  • 6856

[STL] List 中sort为什么采用归并排序

这几天在看STL(SGI版本----侯捷),在看完第一章后有点懵,但还是很震撼,STL的设计理念确实很好,至于有多么好我们都懂,所以就不再评价了。      由于刚刚开始看,所以有些东西并不是很透彻,...
  • zr1076311296
  • zr1076311296
  • 2016年05月22日 19:07
  • 778

二哥学算法之归并排序和希尔排序

归并排序是“分治”法一个很典型的应用。它比较稳定,时间复杂度也比较好,最坏也只是ON(log2N)ON(log_2N),空间复杂度为O(N)O(N)。 它的基本思想是对两个已经排好序的表(设为A和B...
  • u013220338
  • u013220338
  • 2015年03月22日 09:34
  • 1309

二路归并排序简介及其并行化

一、归并排序简介 归并排序属于比较类非线性时间排序,号称比较类排序中性能最佳者,在数据中应用中较广。 归并排序是分治法(Divide and Conquer)的一个典型的应用。将已有序的子序列合并,...
  • K346K346
  • K346K346
  • 2015年05月08日 17:46
  • 3199
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:归并排序
举报原因:
原因补充:

(最多只允许输入30个字)