golang 归并排序


本文摘自网络,作者,侵删。

归并排序的时间复杂度为: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 归并排序

相关阅读 >>

Golang如何升级?

练习笔记

Go安装各种第三方库、包的命令

Go语言两种版本的hello world你会吗

Go语言学习(五):通道的用法

Go语言函数方法

创建http service的不同姿势

gin(6)-模板渲染

Go time 包中的 adddate 的逻辑避坑指南

Golang学习笔记for循环语句

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...