堆排序,前一个其实写错了

来源:互联网 发布:鼎峰网络兼职平台 编辑:程序博客网 时间:2024/05/12 07:04

前几天写了一个堆排序,发现其实有个错误。

我写了如下一个代码:

 

 

 

发现AdjustHeap其实没有整理成大根堆,而是类似于冒泡法把最大一个节点放到了头上。

但是堆调整是不充分的。

 

所以我想到要使用堆排序的话,必须要建立一个树结构,Initialheap的时候是对整个树结构做调整。

这只要做一次。而交换过一次后就可以只对头元素找一个合适他的位子就好了。因为其他的元素已经是堆了。

 

所以貌似很难利用Array中未排的元素作为二叉树,因为随着Array长度减少,叶子节点会有漂移。

就不能保证    “除了头元素以外别的元素仍然是树这个前提”。

 

或者就是每次对前面未排的array当做二叉树做全体initialHeap,如下:

 

但这样感觉是不合算的: