为了试验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里面改了尝试,这里就不改了哈哈。