golang版 堆排序

核心代码

package lib

var nums []int

func HeapSort(numsArray []int) []int {

    nums = numsArray
    heapSize := len(nums)
    for heapSize > 1 {
        //建堆空间
        buildHeep(heapSize)
        //交换排序后的堆顶和最后一个堆元素
        swap(&nums[0], &nums[heapSize-1])
        //堆空间减1
        heapSize--
    }
    return nums
}

func swap(a, b *int) {
    *a, *b = *b, *a
}

func buildHeep(len int) {
    // 找到最后一个节点的父节点
    parent := len/2 - 1
    for parent >= 0 {
        heapify(parent, len)
        parent--
    }
}

func heapify(parent, len int) {
    // 判断两个子节点是否比父节点大,如果子节点大则交换子节点和父节点
    max := parent
    lson := parent*2 + 1
    rson := parent*2 + 2
    if lson  nums[max] {
        // 左节点是否大于父节点
        max = lson
    }
    if rson  nums[max] {
        // 右节点是否大于父节点
        max = rson
    }
    if parent != max {
        swap(&nums[max], &nums[parent])
        heapify(max, len)
    }
}

调用入口

package main

import (
    "fmt"
    "test/lib"
)

func main() {

    fmt.Println(lib.HeapSort([]int{
        4, 3, 5, 0, 8, 6, 7,
    }))
}
golang后端技术

golang 设置http超时时间

2022-6-4 10:34:22

DevOpsgolang后端技术

Go并发和协程池

2022-6-4 10:49:46

搜索