最小堆的插入洗掉函式
? 這里記錄最小堆插入洗掉函式的寫法,如果需要最大堆,只需要基本操作的反過來就可以了,
? 操作基本都有注釋,結合注釋理解,
Talk is cheap . Show me the code .
vector<int> minHeap;//需要設施哨兵,minHeap[0]=INT_MIN;
void insert(int x) {
minHeap.push_back(x);//將插入值放在堆底
int child=minHeap.size()-1;
while(minHeap[child/2]>minHeap[child]){//上濾操作,調整為最小堆
swap(minHeap[child/2],minHeap[child]);//上濾操作
child/=2;//完全二叉樹在陣列中表示的特點:child/2=parent
}
}
int Delete(){
int value=https://www.cnblogs.com/cell-coder/p/minHeap[1];//有哨兵,index為1的位置才是堆頂
swap(minHeap[1],minHeap[minHeap.size()-1]);//交換堆疊頂和底部元素
minHeap.pop_back();//將目標值彈出
int parent=1,child=0;
for(parent=1;parent*2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/205847.html
標籤:其他
