美文网首页
Go算法——堆排序

Go算法——堆排序

作者: ProgrammingGuy | 来源:发表于2020-02-13 14:24 被阅读0次
package main

import (
    "fmt"
    "math"
)

func parent(i int) int {
    return i >> 1
}

func left(i int) int {
    return i << 1
}

func right(i int) int {
    return i<<1 + 1
}

func buildMaxHeap(array []int) {
    heapSize := len(array) - 1
    for i := heapSize / 2; i > 0; i-- {
        maxHeapify(array, heapSize, i)
    }
}

func maxHeapify(array []int, heapSize, i int) {
    l, r := left(i), right(i)
    largest := i
    if l <= heapSize && array[l] > array[i] {
        largest = l
    }
    if r <= heapSize && array[r] > array[largest] {
        largest = r
    }
    if largest != i {
        array[largest], array[i] = array[i], array[largest]
        maxHeapify(array, heapSize, largest)
    }
}

func printArray(array []int) {
    for i := 1; i < len(array); i = i << 1 {
        for k := 0; k < i && k+i < len(array); k++ {
            fmt.Print(array[i+k], " ")
        }
        fmt.Println()
    }
}

func heapSort(array []int) {
    buildMaxHeap(array)
    heapSize := len(array) - 1
    for i := len(array) - 1; i > 1; i-- {
        array[i], array[1] = array[1], array[i]
        heapSize--
        maxHeapify(array, heapSize, 1)
    }
}

func main() {
    arr := []int{math.MaxInt64, 13, -3, -25, 20, -3, -16, -23, 18, 20, -7, 12, -5, -22, 15, -4, 7}
    printArray(arr)
    buildMaxHeap(arr)
    printArray(arr)
    heapSort(arr)
    fmt.Println(arr)
}
image.png

相关文章

  • Go算法——堆排序

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

  • 数据结构与算法

    常见排序算法 堆排序 算法大全 算法大汇总

  • 堆排序算法思想

    前两天看了看堆排序算法,啃了半天的书,最后搞明白了堆排序算法,今天有时间给大家说说这个堆排序算法。首先讲一下算法的...

  • 排序算法-堆排序

    参考: Java排序算法(五):堆排序 【算法与数据结构】图说堆排序 【数据结构】排序算法:希尔、归并、快速、堆排...

  • 堆排序

    转载:图解排序算法(三)之堆排序 预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选...

  • 常用排序算法之堆排序

    堆排序算法 运行 输出

  • 算法与数据结构(六):堆排序

    title: 算法与数据结构(六):堆排序tags: [算法与数据结构, C语言, 堆排序]date: 2019-...

  • 数据结构

    Q:堆排序 A:1 堆排序算法(图解详细流程)2 堆排序 Q:排序算法时间复杂度与稳定性 选择排序为什么不稳定:举...

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

网友评论

      本文标题:Go算法——堆排序

      本文链接:https://www.haomeiwen.com/subject/rgokfhtx.html