堆排序

Posted shiwenhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆排序相关的知识,希望对你有一定的参考价值。

 技术图片

 

package HeapSort

// 使用堆排序查询出找出堆里面最大的数
func HeapSortMax(arr []int, length int) []int {
    //length := len(arr)
    if length <= 1 {
        return arr
    }
    depth := length/2 - 1
    // 从最底部一个二叉树开始找
    for i := depth; i >= 0; i-- {
        topMax := i
        leftNode := 2*i + 1
        rightNode := 2*i + 2
        if leftNode < length && arr[leftNode] > arr[topMax] {
            topMax = leftNode
        }
        if rightNode < length && arr[rightNode] > arr[topMax] {
            topMax = rightNode
        }
        if i != topMax {
            arr[i], arr[topMax] = arr[topMax], arr[i]
        }
    }
    return arr
}

func HeapSort(arr []int) []int {
    length := len(arr)
    // 这里是找出最大的放在最后面
    for i := 0; i < length; i++ {
        lastLen := length - i
        HeapSortMax(arr, lastLen)
        
        arr[0], arr[lastLen-1] = arr[lastLen-1], arr[0]
      
    }
    return arr
}

 

以上是关于堆排序的主要内容,如果未能解决你的问题,请参考以下文章

选择排序(简单选择排序堆排序的算法思想及代码实现)

排序--08---堆排序

python代码实现堆排序

算法-java代码实现堆排序

一文带你了解堆排序

堆排序