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