Go语言实现堆排序
题目地址:https://leetcode.cn/problems/sort-an-array/submissions/670393083/
// 算法思路:先构建大顶堆,然后交换第0个元素和最后一个元素(则最大的元素在最后面)。循环此过程
func HeapSort(nums []int) {
size := len(nums)
for i := size - 1; i >= 0; i-- {
heapify(nums, i, size)
}
for size > 0 {
size--
swap(nums, 0, size)
heapify(nums, 0, size)
}
}
// 调整堆
func heapify(nums []int, i, size int) {
left := i*2 + 1
for left < size {
maxChild := left
// 如果右孩子存在且比左孩子大
if left+1 < size && nums[left+1] > nums[left] {
maxChild = left + 1
}
// 如果最大孩子比父节点大,交换
if nums[maxChild] > nums[i] {
swap(nums, i, maxChild)
i = maxChild
left = i*2 + 1
} else {
break
}
}
}

被折叠的 条评论
为什么被折叠?



