赞
踩
完整代码
//排升序-建大堆 排降序-建小堆 void HeapSort(int* a, int n) { //建堆--向上调整建堆 -- O(N*logN) /*for (int i = 1; i < n; i++) { AdjustUp(a, i); }*/ //建堆--向下调整建堆 -- O(N) for (int i = (n - 1 - 1) / 2; i >= 0; --i) { AdjustDown(a,n,i); } int end = n - 1;//end正好是前面数据个数 while(end>0) { Swap(&a[0], &a[end]); AdjustDown(a, end, 0); end--; } }
为什么说只看最后一层,因为最后一层就占了二叉树总数量的一半,要排好最后一层,每次都需要挪动高度次
所以可以认为是 O(NlogN)
int end = n - 1;//end正好是前面数据个数
while(end>0)
{
Swap(&a[0], &a[end]);
AdjustDown(a, end, 0);
end--;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。