版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36431213/article/details/82853519
- go 语言实现堆排序
package main
import (
"fmt"
)
func buildHeap(arr []int) {
length := len(arr)
for i := (length / 2) - 1; i >= 0; i-- {
toHeap(i, length-1, arr)
}
}
func toHeap(i int, n int, arr []int) {
max := i
left := 2*i + 1
right := 2*i + 2
if left <= n && arr[max] < arr[left] {
max = left
}
if right <= n && arr[max] < arr[right] {
max = right
}
if max != i {
arr[i], arr[max] = arr[max], arr[i]
toHeap(max, n, arr)
}
}
func heapSort(arr []int) {
length := len(arr)
buildHeap(arr)
for {
if length > 1 {
arr[0], arr[length-1] = arr[length-1], arr[0]
length--
toHeap(0, length-1, arr)
} else {
break
}
}
}
func main() {
arr := []int{9, 0, 6, 5, 8, 2, 1, 7, 4, 3}
fmt.Println(arr)
heapSort(arr)
fmt.Println(arr)
}