1. 堆是乙個完全二叉樹,堆主要設計到的操作有插入,刪除,堆化。
2. 堆的主要應用有堆排序:從小到大排序,使用大頂堆;從大到小排序,使用小頂堆。
3. 下面以大頂堆為例,給出實現**:
view code
1 #include 2 #include 34. 堆的應用:4using
namespace
std;56
//大頂堆的實現
7class
myheap816
else
1720 data=new
int[heapsize];
21 currentsize=0;22
}23int leftchild(int
pos)
2427
int rightchild(int
pos)
2831
int parent(int
i)32
3536
//遞迴的處理方式
37//
void max_heapify(int pos)
38//
47//
if (r48
//51
//if (maxnumber!=pos)
52//
56//}57
58//
使用迴圈替代尾遞迴
59void max_heapify(int
pos)
6071
if (r
7275
if (maxnumber!=pos)
7679
else
8083 pos=maxnumber;84}
85}86bool
isfull()
8790
91//
插入,將元素插入到末尾,然後將元素上浮到合適的位置
92void insert(int
elem)
9399 data[currentsize++]=elem;
100int pa=parent(currentsize-1
);101
int cur=currentsize-1
;102
while ((pa>=0) && (data[pa]
103108
}109
110//
刪除堆頂的元素
111//
將堆頂元素和最後乙個元素交換,然後將堆頂元素下降
112//
到乙個合適的位置
113void
deletemax()
114119
120//
列印121
void
print()
122127 cout<
128}
129130
//堆排序
131void
heapsort()
132140
}141 ~myheap()
142145
protected
:146
private
:147
enum ;
148int
heapsize;
149int
currentsize;
150int *data;
151};
152153
intmain()
154;
156int number[length]=;
157myheap myheap(length);
158for(int i=0;i)
159162
myheap.print();
163//
int ppos=myheap.parent(length-1);
164//
for (int i=ppos;i>=0;i--)
165//
168myheap.heapsort();
169myheap.print();
170//
myheap.deletemax();
171//
myheap.print();
172 }
(1) 乙個檔案中包含了1億個隨機整數,如何快速的找到最大(小)的100萬個數字?(時間複雜度:o(n lg k))。
答:若要找出100萬個最大的數,需要維護乙個含有100萬元素的小頂堆。遍歷1億個數,如果某個數比小頂堆最小元素大,則用這個數替代小頂堆中的最小數,之後使小頂堆最小堆化。遍歷結束之後,堆中儲存的就是最大的100萬個數。遍歷一次的時間複雜度o(n),最小堆化o(lgk)。總的時間複雜度o(n lg k)。
5.堆是一種非常基礎但很實用的資料結構,很多複雜演算法或者資料結構的基礎就是堆,因而,了解和掌握堆這種資料結構顯得尤為重要。
資料結構 堆及堆的應用
堆是一種特殊的樹形結構,堆的把每乙個節點都有乙個值,我們通常所說的堆這種資料結構,指的就是二叉堆。其實它可以被看做乙個完全二叉樹。它的每個節點的子樹又可以被看做是堆。堆可以分為最大堆和最小堆 最大堆 每個父節點都大於孩子節點 最小堆 每個父節點都小於孩子節點 a 我們在定義堆的資料成員的時候,利用s...
資料結構 堆及堆的應用
1.堆 把一組資料按照完全二叉樹的順序儲存模式儲存在乙個二維陣列中,若ai 若ai ai 1 ai ai 2,則稱為大堆 i 0,1,2.n 在堆中,若設父親節點為parent,則它的左孩子為2 parent 1,右孩子為2 parent 2 void makeheap datatype a,siz...
堆的基本演算法及應用。
今天我來介紹一下堆的基本演算法和它的一些簡單應用。一 基本演算法 pragma once include include include include includetypedef struct heapheap 堆的初始化。void heapinit heap ph,int array,int ...