美文网首页
排序算法——归并排序

排序算法——归并排序

作者: 令狐蛋挞 | 来源:发表于2017-07-22 22:07 被阅读0次

原理

归并排序的基础是合并有序数组,运用了分治的思想,将数组对半分,递归,直到两个数组长度都为1,可以看作两个有序数组,然后将其合并,在递归处得到长度更大的有序数组,再合并。

复杂度分析

平均时间复杂度为O(n㏒₂n)
时间复杂度最坏为O(n
㏒₂n)
空间复杂度为 O(n+㏒₂n),临时数组+递归所需栈空间
稳定。网上有空间复杂度为O(1)的实现,暂时还没研究。

代码实现

合并有序数组的实现

/**
 * 合并两个有序数组
 **/
private void mergeSortedArr(int a[], int b[], int c[]){
    int i=0;
    int j=0;
    int k=0;
    while (i < a.length && b < j.length){
        if (a[i] < b[j]) {
            c[k++] = a[i++];
        } else{
            c[k++] = b[j++];
        }
    }
    while (i < a.length){
        c[k++] = a[i++];
    }
    while (j < b.length){
        c[k++] = b[j++];
    }
}

归并排序实现

/**
 * 归并排序
 * 合并两个有序数组,分治思想
 **/

public void sort(int[] a){
    mergeSort(a, 0, a.length - 1, new int[a.length]);
}

private void mergeSort(int[] a, int start, int end, int[] tmp){
    if (start >= end) {//递归出口
        return ;
    }
    int middle = (start + end)/2;
    mergeSort(a, start, middle, tmp);//左边有序
    mergeSort(a, middle, end, tmp);//右边有序
    stepSort(a, start, middle, end, tmp);//合并两个有序数组
}

private void stepSort(int[] a, int start, int middle, int end, int[] tmp){
    int i = start;
    int j = middle;
    int k = 0;
    while (i <= middle && j < end){
        if (a[i] < a[j]) {
            tmp[k++] = a[i++];
        } else{
            tmp[k++] = a[j++];
        }
    }
    while (i <= middle){
        tmp[k++] = a[i++];
    }
    while (j < end){
        tmp[k++] = a[j++];
    }
    //结果写回数据源
    for (i = 0; i < k; i++) {
        a[i + start] = tmp[i];
    }
}

相关文章

  • java实现快速排序、归并排序、希尔排序、基数排序算法...

    快速排序算法 归并排序算法 希尔排序算法 基数排序算法

  • 2018-06-30

    排序算法之归并排序 归并排序算法是排序算法中的经典算法之一,其核心思想是利用归并的思想实现的排序方法,该算法采用经...

  • 排序算法之归并排序

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

  • 归并排序

    图解排序算法(四)之归并排序 基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用...

  • 算法入门——归并排序、希尔排序

    上篇文章我们学习了算法入门——堆排序,这篇文章我们学习算法入门——归并排序、希尔排序。 归并排序 归并排序是将一个...

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 归并排序

    归并排序(Merge Sort): 归并排序是一个相当“稳定”的算法对于其它排序算法,比如希尔排序,快速排序和堆排...

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

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

  • 归并排序

    归并排序 这个排序算法是建立在归并操作上的一种有效的排序算法,算法主要采用分治法,归并排序的算法复杂度为O(n*l...

  • 归并排序

    归并排序 归并排序(Mergesort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分...

网友评论

      本文标题:排序算法——归并排序

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