1.2归并排序

作者: 半寸舌_ | 来源:发表于2016-07-27 13:51 被阅读115次

1.输入与输出

输入:需要排序的数组。

输出:排好序的数组。

2.算法思想

归并排序采用了“分治”的思想。在希尔排序中数组被等距离的分成了一个个的小数组。而在归并排序中,程序直接按数组序号将其平分为A B两组,递归下去继续分割,直到分为单独的元素为一组。这样的情况下我们可以把每一组看做一个单独的有序数组。再一一进行合并。

两有序数组合并时只需观察它们的第一个数字,取出较小的并在原数组中删除,若有一数组为空,直接将另一数组元素按顺序落下。便可合并完成。

3.伪代码及注释

代码的主体部分主要分为两个步骤进行实现

第一个步骤:将数组中的元素递归的分为一个个小数组,直到分为单个元素为止。

第二个步骤:将相邻的两个小数组进行合并操作

执行的顺序类似于完全二叉树的后序遍历,程序先分离到底,分离出最左边的第一个元素,然后找相邻的一个,再将两数组合并。


算法实现过程.gif

4.java代码实现

public class mergeSort{
public static void main(String args[]){
    int[] text = {1,7,9,8,4,5,2,6,3,3};
    ms(text);
    show(text);
           }    
public static void ms(int[] a,int hi,int lo,int[] temp){
    int mid = 0;
    if( hi < lo ){       
       mid = (hi+lo)/2;
       ms(a,hi,mid,temp);
       ms(a,mid+1,lo,temp);
       merge(a,hi,mid,lo,temp);
    }
}
public static void ms(int[]a){   
  int[] temp = new int[a.length];
  ms(a,0,a.length-1,temp);
}
public static void merge(int[] a,int hi,int mid,int lo,int[] temp){  
    int i,j,k;
    i = hi;
    j = mid+1;
    k = 0;       
    while(i <= mid && j<=lo){
        if(a[i]<a[j]) temp[k++] = a[i++];
        else temp[k++] = a[j++];}
    while(i<=mid){        
        temp[k++] = a[i++];        
    }     
    while(j<=lo){
        temp[k++] = a[j++];
    }    
    for (i = 0; i < k; i++)
        a[hi + i] = temp[i]; }


   public static void show(int []a){   
    for(int i=0;i<a.length;i++)
       System.out.print(a[i]+" ");
}
}

5.复杂度

归并排序的最好、最坏和平均时间复杂度都是O(nlogn),稳定性不言而明。

空间复杂度是O(n)。

6.优缺点及适用范围

缺点:归并排序算法比较占用内存,需要有额外的内存空间提供缓存。

优点:相比于传统排序算法效率高且相比于快速排序时间消耗较稳定的排序算法。

相关文章

  • 常见算法前端JS实现 — 排序

    1.排序算法 1.1 冒泡排序 1.2 快速排序 1.3 二路归并

  • 1.2归并排序

    1.输入与输出 输入:需要排序的数组。 输出:排好序的数组。 2.算法思想 归并排序采用了“分治”的思想。在希尔排...

  • 排序

    归并排序,N个有序数组的归并排序 无序数组查找中位数 1.1 将前(n+1)/2个元素调整为一个最小堆; 1.2 ...

  • 排序算法

    约定 选择排序 冒泡排序 插入排序 希尔排序 归并排序1. 归并方法2. 自顶向下归并排序3. 自底向上归并排序 ...

  • 排序二:归并、快排

    文章结构 归并排序 快速排序 源码 1. 归并排序 1.1 什么是归并排序 归并排序的思想是:将待排序的区间平分成...

  • java归并排序

    归并排序什么是归并排序:图解归并排序归并排序有两种实现方式,一是基于递归,而是基于迭代1)基于递归的归并排序: 基...

  • 算法—排序篇2

    1、归并排序(Merging Sort) 归并排序(Merging Sort): 就是利用归并的思想实现排序⽅法....

  • 常见的排序算法(2)

    要点 快速排序 归并排序 1.快速排序 2.归并排序

  • 排序算法之归并排序

    归并排序(Merge Sort) 归并排序是利用归并的思想实现排序的方式,该算法采用的是经典的分治算法 归并排序过...

  • 算法 第二章第二部分笔记

    各种排序算法的性能特点 选择排序 插入排序 希尔排序 归并排序 本地归并排序 自底向上的归并排序 快速排序 三向切...

网友评论

    本文标题:1.2归并排序

    本文链接:https://www.haomeiwen.com/subject/hjunjttx.html