資料結構 最小堆 最大堆(小根堆 大根堆)

2021-10-02 11:44:05 字數 1507 閱讀 9920

1.最小堆的實現參考:

int a[n]

;void

build()

else

break;}

a[j/2]

=tem;

// for(int i=1;i<=n;i++)

// cout}int

main()

最大堆的實現差不多

2.以最小堆為例,說明加入乙個元素

void

insert

(int x)

a[i]

=x;}

void

erase

(int x)

else

break;}

a[root]

=y;}

9 804 9059 9155 8849

9 804 9155 9059 8849

建堆有兩種方法,一種是上述的已知序列得到的,另一種則是邊插入邊建立;

邊插入邊建立:

int

insert

(int i)

return0;

}int

main()

return0;

}

但是兩者有些情況下是不一樣的,下面的附贈上我的對比**,有興趣的可以執行程式看一下;

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int n =

1e5+10;

const

int mod =

1e9+7;

int n;

int a[n*10]

,b[n]

;void

build()

else

break;}

b[j/2]

=tem;

}int y=0;

for(

int i=

1;i<=n;i++)}

if(y)

}int

insert

(int i)

return0;

}int

main()

build()

;}return0;

}

注:pta7-12關於堆的判斷(25分)這一題,只能用邊插入邊建堆來實現,別問我怎麼知道的,qwq

資料結構 堆(Heap)大根堆 小根堆

目錄 堆的儲存 一般都用陣列來表示堆,i結點的父結點下標就為 i 1 2。它的左右子結點下標分別為2 i 1和2 i 2。如第0個結點左右子結點下標分別為1和2。堆的操作 insert 插入乙個元素 新元素被加入到heap的末尾,然後更新樹以恢復堆的次序。每次插入都是將新資料放在陣列最後。可以發現從...

資料結構 大根堆

大根堆 堆總是不大於其父節點的值 二叉堆中的上浮,siftup,把新節點加在最後一位,然後跟該節點的父節點相比較,大於父節點,交換 二叉堆中的下沉,siftdown,把最大的根節點移除後,把最後乙個節點放在根的位置,然後把該根節點的左右孩子的最大值作比較,小了,交換。public class max...

day36 資料流中的中位數(大根堆小根堆)

問題描述 如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。樣例 使用大根堆維護序列的前半部分,使用小根堆維護序列的後半部分。序列是指的從小到大排列。首先向大根堆裡...