美文网首页
golang 归并排序

golang 归并排序

作者: 夜空中乄最亮的星 | 来源:发表于2021-04-01 15:32 被阅读0次

归并排序的时间复杂度为:O(nlogn)

func HeapSort(data []int) []int {
    len := len(data)
    if len <=1 {
        return data
    }
    //将待排序的数组划分为左右2部分,递归的进行
    mid :=len/2
    left :=data[:mid]
    right :=data[mid:]
    left= HeapSort(left)
    right= HeapSort(right)
    //对划分后的两部分进行排序
    return Sort(left,right)
}

func Sort(left []int,right []int) []int {
    llen :=len(left)
    rlen :=len(right)
    var tmp []int

    i,j:=0,0

    for  {
        //如果left先遍历结束,则将right剩余部分追加到tmp中
        if i >=llen{
            tmp =append(tmp,right[j:]...)
            break
        }
        //如果right部分先遍历结束,则将left剩余部分追加到tmp中
        if j >=rlen{
            tmp =append(tmp,left[i:]...)
            break
        }
        //比较left和right将较小的元素存入tmp
        if left[i] < right[j]  {
            tmp =append(tmp,left[i])
            i++
        }else{
            tmp =append(tmp,right[j])
            j++
        }
    }
    return tmp
}


//测试:
func main() {
    arr :=[]int{0,1,5,2,3,8,0,4,9,2}
    r:=HeapSort(arr)
    fmt.Println(r)
}
输出:[0 0 1 2 2 3 4 5 8 9]

相关文章

  • golang 归并排序

    归并排序的时间复杂度为:O(nlogn)

  • 排序算法

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

  • 排序二:归并、快排

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

  • java归并排序

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

  • 算法—排序篇2

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

  • 常见的排序算法(2)

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

  • golang实现归并排序

    归并排序的操作步骤如下: 首先将数组一份为二,分别为左数组和右数组 若左数组的长度大于1,那么对左数组实施归并排序...

  • golang 写个归并排序

    归并排序是核心原理是分治和递归的运用,分治,那就需要分而治之,治在这里有治理合并意义。 算法描述 把长度为n的输入...

  • 排序算法之归并排序

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

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

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

网友评论

      本文标题:golang 归并排序

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