🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> # 堆排序 ~~~ package main import "fmt" func heapSort(arr []int) { n := len(arr) // 构建最大堆 for i := n/2 - 1; i >= 0; i-- { heapify(arr, n, i) } // 从最大堆中取出元素并进行排序 for i := n - 1; i > 0; i-- { // 将堆顶元素(最大值)与当前未排序部分的最后一个元素交换 arr[0], arr[i] = arr[i], arr[0] // 重新调整堆,排除已排序部分 heapify(arr, i, 0) } } func heapify(arr []int, n, i int) { largest := i left, right := 2*i+1, 2*i+2 // 比较根节点和其左右子节点,找出最大值的索引 if left < n && arr[left] > arr[largest] { largest = left } if right < n && arr[right] > arr[largest] { largest = right } // 如果最大值不是根节点,则交换并继续调整子树 if largest != i { arr[i], arr[largest] = arr[largest], arr[i] heapify(arr, n, largest) } } func main() { // 测试数据 arr := []int{64, 34, 25, 12, 22, 11, 90} fmt.Println("排序前:", arr) heapSort(arr) fmt.Println("排序后:", arr) } ~~~