Go 堆排序

为了试验python高性能上的分析python 函数和整体执行时间的各种工具,写了个堆排序。发现自己好久没写GO了。。于是用Go写了一遍练练手

package main

import "fmt"

func Heapify(A []int, i int, heap_size int) {
    l := i*2 + 1
    r := i*2 + 2
    var largest int
    if l < heap_size && A[l] > A[i] {
        largest = l
    } else {
        largest = i
    }
    if r < heap_size && A[r] > A[largest] {
        largest = r
    }
    if i != largest {
        A[i], A[largest] = A[largest], A[i]
        Heapify(A, largest, heap_size)
    }
}

func Build(A []int) int {
    heapsize := len(A)
    for i := len(A)/2 - 1; i > -1; i-- {
        Heapify(A, i, heapsize)
    }
    return heapsize
}

func main() {
    a := []int{1, 24, 35, 343, 463, 46, 34, 35, 12, 123, 245, 413, 5, 132}
    heapsize := Build(a)
    for i := len(a) - 1; i > -1; i-- {
        a[i], a[0] = a[0], a[i]
        heapsize--
        Heapify(a, 0, heapsize)
    }
    fmt.Println(a)
}

思路就是用Heapify去构造和维护一个最大堆,开始时,将整个数列变成一个最大堆,然后交换首个元素和最后一个元素,然后用len-1数构造最大堆,依次类推。这里面有个尾递归,后面测性能优化的时候会在python里面改了尝试,这里就不改了哈哈。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值