泛型演算法系列37 堆演算法

2021-05-02 15:18:22 字數 773 閱讀 1020

1。概念:堆是一種特殊的二叉樹,具備以下兩種性質

1)每個節點的值都大於(或者都小於,稱為最小堆)其子節點的值

2)樹是完全平衡的,並且最後一層的樹葉都在最左邊

這樣就定義了乙個最大堆。

2。堆可以用乙個陣列表示,有如下性質:

heap[i]>=heap[2*i+1]  其中0<=i<=(n-1)/2

heap[i]>=heap[2*i+2]  其中0<=i<=(n-2)/2

3.// push_heap為向堆中新增乙個新的元素, 呼叫這個演算法的前提是[first, last)之間的元素滿足堆的條件

// 新加入的元素為last

void    push_heap(int* pfirst, int* plast);

// pop_heap為從堆中刪除乙個元素, 呼叫這個演算法的前提是[first, last)之間的元素滿足堆的條件

// 被刪除的元素被放置到last - 1位置,由於這裡是max-heap,所以被刪除的元素是這個序列中最大的元素

void    pop_heap(int* pfirst, int* plast);

// make_heap將序列[first, last)中的元素按照堆的性質進行重組

void    make_heap(int* pfirst, int* plast);

// 對堆進行排序, 呼叫這個函式可以成功排序的前提是[pfirst, plast)中的元素符合堆的性質

void    sort_heap(int* pfirst, int* plast);

泛型演算法系列6 find find if

include stdafx.h include include include include include include include using namespace std class ourfriends static void friendset const string fs,in...

泛型演算法系列7 find first of

include stdafx.h include include include include using namespace std include include include find the first instance in s array of any characters in t...

演算法系列7 堆排序

堆排序 是指利用堆這種資料結構所涉及的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子節點的鍵值或索引總是大於或者小於它的父節點 時間複雜度平均為o nlog2n 最好為o nlog2n 最壞o nlog2n 空間複雜度為o 1 不穩定排序 d0 99 5,36 7,22 ...