# ifndef maxheap
# define maxheap
# includeusing namespace std;
const int capacity=100;
class maxheap
void push(const int &data);
void initialize(int a,int thesize);
void pop();
int top()
protected:
int *heap;
int arraylength;
int heapsize;};
void maxheap::initialize(int a,int thesize)
} heap[child/2]=thedata; }
}void maxheap::push(const int &data)
} heap[currnode]=data; //迴圈終止後執行賦值。
}//刪除堆頂元素,使用最後乙個元素重構大頂堆 。
void maxheap::pop()
{ int lastdata=heap[heapsize--]; //
int root=1;
int child=root*2;
while(child<=heapsize)
{ if(childheap[child]) 如果此數比最大的孩子節點的值大,就結束while迴圈,執行迴圈外的賦值語句
break;
if(lastdata# include"maxheap.cpp"
using namespace std;
int main()
{ maxheap s;
int n;
cin>>n;
int a[n];
for(int i=0;i>a[i];
s.initialize(a,n);
for(int i=0;i學了堆排序的思想就可以直接對陣列使用類似堆排序的演算法進行排序。
堆排序之 大頂堆
堆的定義 設有n個元素的序列 1 2 解釋 如果讓滿足以上條件的元素序列 建堆的步驟 從最後乙個非終端結點開始往前逐步調整,讓每個雙親大於 或小於 子女,直到根節點為止。注意 終端結點 即葉子 沒有任何子女,無需單獨調整。建堆的具體做法 1 將原始序列轉換成完全二叉樹。2 從序號最大的非葉子節點開始...
堆排序詳解 大頂堆
堆的概念 堆是一顆順序儲存的完全二叉樹 每個結點的關鍵字都不大於其孩子結點的關鍵字,這樣的堆稱為小根堆 每個結點的關鍵字都不小於其孩子結點的關鍵字,這樣的堆稱為大根堆 對於n個元素的序列當且僅當下列關係之一的時候,稱之為堆 1 ri r2i 1 且 ri r2i 2 小根堆 2 ri r2i 1 且...
排序 堆排序 大根堆 大頂堆
1.小根堆 若根節點存在左子女則根節點的值小於左子女的值 若根節點存在右子女則根節點的值小於右子女的值。2.大根堆 若根節點存在左子女則根節點的值大於左子女的值 若根節點存在右子女則根節點的值大於右子女的值。3.結論 1 堆是一棵完全二叉樹 如果公有h層,那麼1 h 1層均滿,在h層連續缺失若干個右...