no message
parent
c27a7d85cd
commit
47296e6b86
|
@ -102,8 +102,8 @@ template <typename T>
|
|||
void buildMaxHeap(T A[], int len) //建立最大堆
|
||||
{
|
||||
std::cout <<"\r\n";
|
||||
// 从最后一个非叶子节点(n/2-1)开始自底向上构建,
|
||||
for (int i = len / 2-1; i >= 0; i--) //从(n/2-1)调用一次maxHeapIfy就可以得到最大堆
|
||||
// 从最后一个非叶子节点(n/2-1)开始自底向上构建,根据完全二叉树的性质, i --肯定也是根节点。从右到左,从下到上调整。
|
||||
for (int i = len / 2 - 1; i >= 0; i--) //从(n/2-1)调用一次maxHeapIfy就可以得到最大堆
|
||||
maxHeapIfy(A, i, len);
|
||||
for (int i = 0; i < len; i++){
|
||||
std::cout << A[i]<<" ";
|
||||
|
@ -139,10 +139,18 @@ void PreOrderTraverse(BSTNode<T> *data)
|
|||
PreOrderTraverse(data->rchild);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*其实整个堆排序过程中, 我们只需重复做两件事:
|
||||
建堆(初始化+调整堆, 时间复杂度为O(n));
|
||||
拿堆的根节点和最后一个节点交换(siftdown, 时间复杂度为O(n*log n) ).
|
||||
*/
|
||||
template <typename T>
|
||||
int heapsort(T *data,uint64_t len,CompareHanlder<T> handle){
|
||||
buildMaxHeap(data, len); //先建立堆
|
||||
buildMaxHeap(data, len); //先建立最大堆,最大堆只能保证根节点比左右两个子树还大
|
||||
|
||||
|
||||
|
||||
// todo
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue