堆和堆排序與封裝

2021-06-19 03:02:44 字數 1029 閱讀 7399

堆是乙個完全二叉樹說著近似完全的二叉樹。

堆主要滿足兩個性質:

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 每個結點的左子樹和右子樹都是乙個二叉堆...