美文网首页
排序算法(2):归并排序

排序算法(2):归并排序

作者: one_zheng | 来源:发表于2018-10-03 13:10 被阅读2次

 归并排序:归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为O(n log n)。

 用归并排序对n个元素的数组进行排序时,当n为2的幂时,元素比较次数在(n log n)/2到n log n - n +1之间,元素被赋值次数为2n log n。时间复杂度O(n log 2n),速度仅次于快排,比较稳定。

 该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。

 归并排序的核心思想是将两个有序的数列合并成一个大的有序的序列。通过递归,层层合并,即为归并。

merge2.png
合并相邻有序子序列

 再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后一次合并,要将[4,5,7,8]和[1,2,3,6]两个已经有序的子序列,合并为最终序列[1,2,3,4,5,6,7,8],来看下实现步骤。


merge3.png
代码实现:
package sort

func MergeSort(array []int, left, right int, temp []int) {
    if left < right {
        mid := (left + right) / 2
        MergeSort(array, left, mid, temp)
        MergeSort(array, mid+1, right, temp)
        Merge(array, left, mid, right, temp)
    }
}

func Merge(array []int, left, mid, right int, temp []int) []int {
    leftStart := left
    rightStart := mid + 1
    i := 0
    for {
        if leftStart >= mid || rightStart >= right {
            break
        }
        if array[leftStart] <= array[rightStart] {
            temp[i] = array[leftStart]
            leftStart++
        } else {
            temp[i] = array[rightStart]
            rightStart++
        }
        i++

    }

    for {
        if leftStart < mid {
            temp[i] = array[leftStart]
        }
        leftStart++
        i++
    }

    for {
        if rightStart < right {
            temp[i] = array[rightStart]
        }
        rightStart++
        i++
    }

    return temp
}

相关文章

  • 常见排序算法

    1 前言 2 排序基础2.1 选择排序2.2 插入排序 3 高级排序算法3.1 归并排序3.1.1 插入排序与归并...

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

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

  • 2018-06-30

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

  • 6-十大排序篇二

    十大排序(2) 今天先学习第二大类排序算法 归并排序 排序排序 希尔排序 堆排序 1.归并排序 分析:利用归并的思...

  • 常用排序算法实现

    1、常见排序算法大致有以下几种:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序2、各种排序算法...

  • 排序算法

    排序算法 1、冒泡排序: 2、插入排序 3、希尔排序 4、堆排序 5、归并排序

  • 排序算法总结

    n^2的算法:冒泡排序,选择排序,插入排序n^1.3的算法:希尔排序nlogn的算法:归并排序、快速排序 泛型的使...

  • 排序算法之归并排序

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

  • Chapter 2 Foundation of Algorith

    Chapter 2 插入排序 线性查找 选择算法 归并排序算法 二分查找算法 冒泡排序 插入排序 循环不...

  • [Haskell] 一些常见的排序算法

    1. 排序算法 (1)选择排序 (2)插入排序 (3)快速排序 (4)归并排序 (5)堆排序 (6)树排序 2. ...

网友评论

      本文标题:排序算法(2):归并排序

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