前几天写了一个堆排序,发现其实有个错误。
我写了如下一个代码:
发现AdjustHeap其实没有整理成大根堆,而是类似于冒泡法把最大一个节点放到了头上。
但是堆调整是不充分的。
所以我想到要使用堆排序的话,必须要建立一个树结构,Initialheap的时候是对整个树结构做调整。
这只要做一次。而交换过一次后就可以只对头元素找一个合适他的位子就好了。因为其他的元素已经是堆了。
所以貌似很难利用Array中未排的元素作为二叉树,因为随着Array长度减少,叶子节点会有漂移。
就不能保证 “除了头元素以外别的元素仍然是树这个前提”。
或者就是每次对前面未排的array当做二叉树做全体initialHeap,如下:
但这样感觉是不合算的: