堆是乙個完全二叉樹說著近似完全的二叉樹。
堆主要滿足兩個性質:
1.父節點一定小於(大於,大根堆)兩個子節點的鍵值。
2.每個子節點都是乙個二叉堆。
一般都用陣列來表示堆,i結點的父結點下標就為(i – 1) / 2。它的左右子結點下標分別為2 * i + 1和2 * i + 2。如第0個結點左右子結點下標分別為1和2。
(b)儲存結構
原始碼在svn裡面:
堆實現封裝:
#include #include #include #include #define left(x) 2*x+1
#define right(x) 2*x+2
#define parent(x) (x-1)/2
using namespace std;
templateclass cheap
inline void heapswap(int a,int b)
}void heapfix(int i)
else
break;}}
void heapsort()
void traheap()
public:
virtual void debug();
inline bool g_or_l(int a,int b)
inline void heapswap(vector& ar,int a,int b)
void heapfix(vector& ar,int i)
void insert(vector& ar,int insert_elem)
}void heapsort(vector& ar)
int main(int argc, char *args)
堆與堆排序
二叉堆是完全二叉樹或者是近似完全二叉樹。二叉堆滿足二個特性 1 父結點的鍵值總是大於或等於 小於或等於 任何乙個子節點的鍵值。2 每個結點的左子樹和右子樹都是乙個二叉堆 都是最大堆或最小堆 當父結點的鍵值總是大於或等於任何乙個子節點的鍵值時為最大堆。當父結點的鍵值總是小於或等於任何乙個子節點的鍵值時...
堆與堆排序
堆排序與快速排序,歸併排序一樣都是時間複雜度為o n logn 的幾種常見排序方法。堆排序是就地排序,輔助空間為o 1 它是不穩定的排序方法。排序的穩定性是指如果在排序的序列中,存在前後相同的兩個元素的話,排序前 和排序後他們的相對位置不發生變化 先說說什麼是堆,堆通常是乙個可以被看做一棵樹的陣列物...
堆與堆排序
堆排序與快速排序,歸併排序一樣都是時間複雜度為o n logn 的幾種常見排序方法。學習堆排序前,先講解下什麼是資料結構中的二叉堆。二叉堆是完全二叉樹或者是近似完全二叉樹。二叉堆滿足二個特性 1 父結點的鍵值總是大於或等於 小於或等於 任何乙個子節點的鍵值。2 每個結點的左子樹和右子樹都是乙個二叉堆...