作者wa007123456 (大笨羊)
看板C_and_CPP
標題[問題] 如何做出標準的 堆積樹 ?
時間Fri Nov 18 10:00:07 2016
開發平台(Platform): (Ex: Win10, Linux, ...)
Win10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
VC++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
小弟想寫一個堆積樹...可是我覺得我的方法好像很拙劣
因為仔細看了一下 發現好像是寫成了 選擇排序 =.= O(n^2)
產生的有點慢
以下是小弟的程式碼:
void myHeap(int data[], int size) {
int point_Top = 0;
int nav_pointer;
while (point_Top < size) {
for (nav_pointer =point_Top+1; nav_pointer < size; nav_pointer++) {
if (data[point_Top] < data[nav_pointer]) {
swap(&data[point_Top], &data[nav_pointer]);
}
}
point_Top++;
}
}
----------------------下面是書上教的(我看不懂 囧)-----------------------------
void cheap(int data[], int b, int bound) {
while(b<bound/2){
int cnode = b * 2 + 1;
if (cnode + 1 < bound) {
if (data[cnode] < data[cnode + 1])
cnode++;
}
if (data[b] < data[cnode]) {
swap(&data[b],&data[cnode]);
}
int i;
for (i = 0; i < bound; i++) {
printf("%d,",data[i]);
}
printf("\n");
b = cnode;
}
-----------------------------------------------------------------------------
感謝大家><
餵入的資料(Input):
無
預期的正確結果(Expected Output):
無
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.195.157
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1479434410.A.443.html
1F:→ steve1012: ...heap =\= heap sort 11/18 22:04
2F:→ steve1012: 書上用的是用array 存一個tree 你先研究一下怎麼用arra 11/18 22:05
3F:→ steve1012: y存binary tree 11/18 22:05
4F:推 firejox: 先拿一張紙和一隻筆畫一個binary complete tree 然後從 11/19 12:41
5F:→ firejox: 頂點開始依序往下編號 去觀察編號間的關係 11/19 12:41
6F:→ wa007123456: 好的 謝謝大家 11/20 19:27
7F:推 Deltak: 關鍵在父子的index 11/21 23:59