堆 學習筆記

2022-06-08 18:15:07 字數 1099 閱讀 4860

完全二叉樹形式

具有單調性

可以用來求最值

也可以用來求最值

大根堆:根節點最大

小根堆:根節點最小

借助vector來建堆

#include

using namespace std;

int main()

return 0;

}

make_heap(a.begin(),a.end(),cmp);

bool cmp(int a,int b)

a.push_back(num);

make_heap(a.begin(),a.end(),cmp);//起維護堆的作用

pop_heap(a.begin(),a.end(),cmp);//把第乙個元素放到最後

a.pop_back();//刪除最後乙個元素

以小根堆為例

void shift_up(int i)else

}return 0;

}

void shift_down(int i,int n)

if(heap[i]>heap[t])else

}return 0;

}

void push(int a,int n)

void pop()

int top()else

}

把資料乙個乙個推入堆裡,開乙個新陣列,挨個彈出

void heap_sort()

}

wsy:

p3378 【模板】堆

p1090 合併果子

hzwer:

[usaco2006 nov] fence repair 切割木板

luan:

p1631 序列合併

p1168 中位數

學習筆記 堆

heap 堆 堆是一種建立在樹上的結構,是一種完全二叉樹型的資料結構,目前了解到的應用是堆排序,然後用於實現優先佇列。堆的特點是,子結點一定比父結點大或者小於父結點。其中,所有子結點都小於父結點的堆是最大二叉堆,子結點小於父結點的是最小二叉堆。堆的核心是heapify,維護堆合法性的演算法 後續談到...

學習筆記 堆

include include typedef struct node minheap 初始化乙個堆 void create minheap h,int maxsize bool isfull minheap h 往堆裡插入資料,其實可以直接在主程式裡輸入就行了 void insert minhea...

堆學習筆記

完全二叉樹比較適合用陣列來儲存 堆化非常簡單,就是順著節點所在的路徑,向上或者向下,對比,然後交換。從堆的定義的第二條中,任何節點的值都大於等於 或小於等於 子樹節點的值,我們可以發現,堆頂元素儲存的就是堆中資料的最大值或者最小值 把最後乙個節點放到堆頂,然後利用同樣的父子節點對比方法。對於不滿足父...