Golang实现如下,不建议直接看题解,容易满头雾。
建议参考正月点灯笼解析实现:堆排序(heapsort)_哔哩哔哩_bilibili
func sortArray(nums []int) []int {
n:=len(nums)
var heapify func(m,i int)
heapify = func(m,i int){
if i >=m {
return
}
c1,c2:=2*i+1,2*i+2
mx := i
if c1<m && nums[c1]>nums[mx] {
mx = c1
}
if c2<m && nums[c2]>nums[mx]{
mx=c2
}
if mx !=i {
nums[mx],nums[i] = nums[i],nums[mx]
heapify(m,mx)
}
}
var buildHeap =func(){
for i:=n/2-1;i>=0;i--{
heapify(n,i)
}
}
buildHeap()
for i:=n-1;i>=0;i--{
nums[0],nums[i] =nums[i],nums[0]
heapify(i,0)
}
return nums
}