美文网首页
合并排序-golang

合并排序-golang

作者: 追梦人在路上不断追寻 | 来源:发表于2020-09-07 22:51 被阅读0次

合并排序

先对数组进行拆分,拆分成一个个单独的数字,然后再对拆分的数组进行合并。整体思路就是天下大事,分久必合。

image.png

如图所示,先对数组进行拆分,然后通过比较合并数组,因为每个合并的数组都是排好序的,因此可以通过遍历进行数组的合并。

代码

package main

import "fmt"

func mergeSort(a []int) []int {
    if len(a) < 2 {
        return a
    }
    m := (len(a)) / 2
    f := mergeSort(a[:m])
    s := mergeSort(a[m:])
    return merge(f, s)
}
func merge(f []int, s []int) []int {
    var i, j int
    size := len(f) + len(s)
    a := make([]int, size, size)
    for z := 0; z < size; z++ {
        lenF := len(f)
        lenS := len(s)
        if i > lenF-1 && j <= lenS-1 {
            a[z] = s[j]
            j++
        } else if j > lenS-1 && i <= lenF-1 {
            a[z] = f[i]
            i++
        } else if f[i] < s[j] {
            a[z] = f[i]
            i++
        } else {
            a[z] = s[j]
            j++
        }
    }
    return a
}
func main() {
    a := []int{75, 12, 34, 45, 0, 123, 32, 56, 32, 99, 123, 11, 86, 33}
    fmt.Println(a)
    fmt.Println(mergeSort(a))
}


时空复杂度

归并排序是稳定排序,它也是一种十分高效的排序,能利用完全二叉树特性的排序一般性能都不会太差。java中Arrays.sort()采用了一种名为TimSort的排序算法,就是归并排序的优化版本。从上文的图中可看出,每次合并操作的平均时间复杂度为O(n),而完全二叉树的深度为|log2n|。总的平均时间复杂度为O(nlogn)。而且,归并排序的最好,最坏,平均时间复杂度均为O(nlogn)。

相关文章

  • 合并排序-golang

    合并排序 先对数组进行拆分,拆分成一个个单独的数字,然后再对拆分的数组进行合并。整体思路就是天下大事,分久必合。 ...

  • leecode刷题(27)-- 合并k个排序链表

    leecode刷题(27)-- 合并k个排序链表 合并k个排序链表 合并 k 个排序链表,返回合并后的排序链表。请...

  • Python 排序算法汇总

    快速排序 合并排序

  • Go 在具体编程中的一些实践

    排序 Golang 提供 sort package[https://golang.org/pkg/sort/] 来...

  • ARTS第五周2020620

    Algorithm 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例...

  • 合并K个排序链表【LeetCode:23】

    题目: 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 输入: ...

  • Swift - LeetCode - 合并K个排序链表

    题目 合并K个排序链表 问题: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 解题思路:...

  • LeetCode:合并K个排序链表

    合并K个排序链表(困难) 题目叙述: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例...

  • Timsort详解

    原理介绍 TimSort是结合了合并排序(合并排序)和插入排序(插入排序)而得出的排序算法,它在现实中有很好的效率...

  • 归并排序

    归并排序:递归加合并的排序

网友评论

      本文标题:合并排序-golang

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