堆的相關演算法

2021-09-07 10:59:29 字數 1074 閱讀 8390

堆是一種特殊的二叉樹。它具有下面兩個性質:

1、每乙個節點的值大於或等於其每乙個子節點的值。

2、該樹全然平衡,最後一層的葉子都處於最左側的位置。

有最大堆和最小堆之分。以上定義是最大堆的定義,最小堆的定義例如以下:

1、每乙個節點的值小於或等於其每乙個子節點的值;

2、該樹全然平衡,最後一層的葉子都處於最左側的位置。

// heap_function.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include using namespace std;

void swap(int *p, int *q)

void moveup(int heap,int start)//向上移動的操作,用於向堆中插入元素用//

else

break; }}

void insert_ele(int heap, int value, int &count)//向堆中插入元素,count為堆中元素的個數。//

void movedown(int heap, int first, int last)

else

largest = last + 1; }}

void delete_ele(int heap, int &count)//從堆中刪除堆頂元素//

void floyalgorithm(int heap,int n)//從底到頂構建堆,n為元素個數//

}void williamsalgorithm(int heap, int n)//從頂究竟構建堆,由john williams提出//

}void heapsort(int heap, int n)//堆排序

}int _tmain(int argc, _tchar* ar**)

; //heapsort(data,9);

//floyalgorithm(data,9);

williamsalgorithm(data,9);

for (int i = 0; i < 9; ++i)

return 0;

}

堆以及堆的相關應用

本文中的堆是一種樹形資料結構,可以把堆看成一種特殊的完全二叉樹,再從二叉樹上加上一些限制條件即可以構成堆。即要求父節點元素全部都大於或等於子節點元素,或者小於等於。這就構成了倆種堆 堆的常見應用為 使用堆進行排序,也就是常說的堆排序,時間複雜度為nlgn 這是比較排序時間複雜度的下限,即使用比較的排...

堆相關問題

講堆不得不提的就是優先佇列。什麼是優先佇列?普通佇列 先進先出,後進後出 如何實現優先佇列?由上圖可知,用堆來實現優先佇列是乙個理想的方法。這裡採用二叉堆 最大堆 的定義 所有節點的值都不大於其父節點的值 二叉堆是乙個完全二叉樹 採用陣列來儲存二叉堆 由二叉堆的定義可以得出結論 對一顆完全二叉樹按層...

記憶體相關函式(堆)

每個程序有個預設堆,用於作業系統對程序呼叫win32函式時分配所需記憶體。這個堆系統自動管理,使用者無法干預 只能夠編譯時指定大小 getprocessheap 獲取預設堆控制代碼。堆的好處 部件保護 防止乙個型別的記憶體物件破壞其他型別的 更有效 相同結構使用乙個堆,分配和釋放時更有效 區域性訪問...