Golang实现最大堆/最小堆

Golang实现最大堆/最小堆

参考: https://yangjiahao106.github.io/2019/01/15/golang-%E6%9C%80%E5%A4%A7%E5%A0%86%E5%92%8C%E6%9C%80%E5%B0%8F%E5%A0%86/
https://studygolang.com/articles/24288

方法一

此方法就是比较传统、常见的方法,下面来构建一个最小堆:

type Heap struct {
   
	Size int
	Elems []int
}

func NewHead(maxSize int) *Heap {
   
	//minHead := new(Heap)
	//minHead.Elems = make([]int, maxSize, maxSize)
	//return minHead
	minHead := Heap{
   Size: -1, Elems: make([]int, maxSize, maxSize)}
	return &minHead
}

func (h *Heap) Push(x int)  {
   
	if h.Size == len(h.Elems) - 1 {
   
		return
	}
	
	h.Size++
	i := h.Size
	// 与父节点进行比较,如果小于父节点,则向上冒泡;否则,停止;
	for i > 0 {
   
		parent := (i - 1) / 2
		if h.Elems[parent] <= x {
   
			break
		}
		h.Elems[i] = h.Elems[parent]
		i = parent
	}
	h.Elems[i] = x
}

func (h 

你可能感兴趣的:(Golang,golang,堆排序)