func heapSort(arr []int, start, end int) {
dad := start
left_son := 2*dad + 1
right_son := 2*dad + 2
if left_son > end {
return
}
idx := left_son
if right_son <= end {
if arr[right_son] > arr[left_son] {
idx = right_son
}
}
if arr[dad] > arr[idx] {
return
}
swap(arr, dad, idx)
heapSort(arr, idx, end)
}
func main(arr []int) []int {
n := len(arr)
for i := n/2 - 1; i >= 0; i-- {
heapSort(arr, i, n-1)
}
for i := n - 1; i > 0; i-- {
swap(arr, 0, i)
heapSort(arr, 0, i-1)
}
return arr[]
}
func swap(arr []int, a, b int) {
tmp := arr[a]
arr[a] = arr[b]
arr[b] = tmp
}
go 堆排序
最新推荐文章于 2024-06-15 23:36:03 发布