堆的实现主要有两点:
(1)建堆,将一个无序序列建成一个堆。
(2)在输出堆顶元素之后,调整剩余元素成为一个新的堆。
这两个过程主要做了同一件事情,就是堆的调整,即将当前节点与其左右子节点进行比较,选出最大的元素值并与当前节点值交换(若当前节点最大,则不用交换)。
具体代码实现:
想到用同一个调整堆的函数,将堆排序的代码精简到如此,比较容易理解,更重要的是可以快速清晰的看出算法的结构,
写代码就要这样,记忆代码也要尽量简洁。
堆的实现主要有两点:
(1)建堆,将一个无序序列建成一个堆。
(2)在输出堆顶元素之后,调整剩余元素成为一个新的堆。
这两个过程主要做了同一件事情,就是堆的调整,即将当前节点与其左右子节点进行比较,选出最大的元素值并与当前节点值交换(若当前节点最大,则不用交换)。
具体代码实现:
想到用同一个调整堆的函数,将堆排序的代码精简到如此,比较容易理解,更重要的是可以快速清晰的看出算法的结构,