美文网首页
Go-归并排序

Go-归并排序

作者: KN郑某某 | 来源:发表于2019-08-29 16:16 被阅读0次

归并排序

  • 算法实现
func merge(list []int, left, mid, right int) {
    lLen := mid - left + 1
    rLen := right - mid
    length := lLen + rLen
    result := make([]int, length)
    // 左边起始位置:left 右边起始位置mid + 1
    // 真实位置: 起始位置 + 索引位置
    for idx, lIdx, rIdx := 0, 0, 0; idx < length; idx++ {
        if lIdx >= lLen {
            result[idx] = list[mid+1+rIdx]
            rIdx++
        } else if rIdx >= rLen {
            result[idx] = list[left+lIdx]
            lIdx++
        } else if list[left+lIdx] > list[mid+1+rIdx] {
            result[idx] = list[mid+1+rIdx]
            rIdx++
        } else {
            result[idx] = list[left+lIdx]
            lIdx++
        }
    }
    // 写回去
    for idx := 0; idx < length; idx++ {
        list[left+idx] = result[idx]
    }
}

func MergeSort(list []int, left, right int) {
    if left < right {
        mid := (left + right) / 2
        MergeSort(list, left, mid)
        MergeSort(list, mid+1, right)
        merge(list, left, mid, right)
    }
}
  • 测试代码
func main() {
    list := []int{8, 4, 8, 2, 9, 10, -3, 3, 20, 15, -1}
    function.MergeSort(list, 0, len(list)-1)
    fmt.Println(list)
}
  • 排序结果

[-3 -1 2 3 4 8 8 9 10 15 20]

  • 时间复杂度

O (nlogn)

  • 空间复杂度

就是 n + logn,所以是线性空间复杂度

O (n)

相关文章

  • Go-归并排序

    归并排序 算法实现 测试代码 排序结果 [-3 -1 2 3 4 8 8 9 10 15 20] 时间复杂度 O ...

  • 排序算法

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

  • 排序二:归并、快排

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

  • java归并排序

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

  • 算法—排序篇2

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

  • 常见的排序算法(2)

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

  • 排序算法之归并排序

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

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

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

  • 归并排序(二路归并排序)

    归并排序的思路 归并排序是通过“归并”操作完成排序的,将两个或者多个有序子表归并成一个子表。归并排序是“分治法”的...

  • 算法排序之归并排序和快速排序

    归并排序和快速排序用的都是分治的思想,用递归的编程技巧来实现.咱们先来看归并排序. 归并排序 归并排序的核心思想就...

网友评论

      本文标题:Go-归并排序

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