package main
import (
"fmt"
)
func swap(i, j int, a []int) {
a[j], a[i] = a[i], a[j]
}
func headAdjust(a []int, start, end int) {
temp := a[start]
for i := 2*start + 1; i <= end; i *= 2 {
if i < end && a[i] < a[i+1] {
i++
}
if temp <= a[i] {
break
}
a[start] = a[i]
start = i
}
a[start] = temp
}
func HeatSort(a []int) {
length := len(a)
if length == 0 {
return
}
for i := length / 2; i >= 0; i
headAdjust(a, i, length-1)
}
for j := length - 1; j >= 0; j
swap(0, j, a)
headAdjust(a, 0, j-1)
}
}
func main() {
a := []int{34, 52, 12, 45, 56, 10, 35}
HeatSort(a)
fmt.Println(a)
}
➜ headSort time go run headSort.go
[10 12 34 35 52 45 56]
go run headSort.go 0.14s user 0.46s system 86% cpu 0.702 total