/*
** 小根堆的實現
** 邏輯模型是乙個完全二叉樹 儲存模型是給vector
** 索引下標從0開始
**(1)如果i=0,結點i是根結點,無父結點;否則結點i的父結點為結點(i-1)/2;
**(2)如果2i+1>n-1,則結點i無左子女;否則結點i的左子女為結點2i+1;
**(3)如果2i+2>n-1,則結點i無右子女;否則結點i的右子女為結點2i+2
** 插入乙個元素:新元素被加入到heap的末尾,然後更新樹以恢復堆的次序。從下往上調整
** 刪除乙個元素:為了便於重建堆,實際的操作是將最後乙個資料的值賦給根結點,堆的元素個數-1,然後再從根結點開始進行一次從上向下的調整。
*/
namespace myheap
minheap
(std:
:vector _data)
}void
insert
(t value)
t pop()
void
swap
(const
int i,
const
int j)
//插入資料需要從下向上調整
//index 從index一直調整到0
void
recorderupwards
(uint index)
}//刪除資料從上向下調整
//從begin位置調整到end位置
void
recorderdownwards
(uint begin,uint end)
else
break;}
else
break;}
} bool empty()
void
print()
std:
:cout << std:
:endl;
} std:
:vector
&get()
const
uint getsize()
};void
test()
; minheap<
int>
h(v)
; h.
print()
;auto datas = h.
get();
uint size = h.
getsize()
;for
(uint i =
0; i < size; i++
) std:
:cout << std:
:endl;
}
c 小根堆陣列實現
主要功能 最小堆排序 大到小 void order 刪除首元素 type fetch root 插入元素 void insert item const type item void insert item faster const type item 快速版本 關鍵 source code file...
C 大根堆與小根堆
c 中,大根堆和小根堆可以使用優先佇列實現。include priority queuepq1 大根堆 priority queue,greater pq2 小根堆該stl支援自定義比較函式,但與sort不同,不支援直接使用lambda函式。自定義的小根堆如下。struct cmp 自定義小根堆 p...
小根堆 陣列實現
特點 父節點永遠比孩子節點小,不強制要求左孩子比右孩子小,但是為了實現方便,我令其左孩子比右孩子小。反之為大根堆。push 插入元素 陣列長度增加 注意 增加的不是本次插入所需要的位置,而是下次元素的位置,這句話能解釋為什麼pop的時候需要 se才能拿到當前堆中的最後乙個元素 從下往上判斷是否滿足小...