堆排序 go实现
堆 想实现堆排序,必须了解数据结构 ---堆。 那么什么是堆呢? 在我看来堆就是一颗完全二叉树的数组形式。 根据其节点的大小,又分为 大顶堆和小顶堆。 堆虽然是树但是不用存子节点的指针,所以内存占用较小。堆主要用来排序,用来搜索性能较低。 他们的数组索引 就是树的层次遍历次序。 也可以得到获取其左右子节点的公式如下: 大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2] 小顶堆:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2] 根据这个公式 我们可以先用代码实现下堆的特性: Heap struct { Items []int } func (hp *Heap) GetLeftIndex(parentIndex int) int { return 2*parentIndex + 1 } func (hp *Heap) GetRightIndex(parentIndex int) int { return 2*parentIndex + 2 } ....