#includeusing namespace std;
int h[101];//用來存放堆的陣列
int n;//用來儲存堆中元素的個數,也就是堆的大小
//交換函式,用來交換堆中的兩個元素的值
void swap(int x,int y)
//向下調整函式
void siftdown(int i)
else
t=i;
//如果它有右兒子,再對右兒子進行討論
//由於堆是完全二叉樹,所以堆中任意乙個結點的右孩子(存在的情況下)編號均滿足i*2+1<=n
if(i*2+1<=n)
} //如果發現最小的結點編號不是自己,說明子結點中有比父結點更小的
if(t!=i)
else
flag=1;//否則說明當前的父結點已經比兩個子結點都要小了,不需要再進行調整了 }
}//建立堆的函式
void creat()
}//刪除最大元素//其實這個函式的效果是得到堆頂的最小元素並返回
int deletemax()
int main()
n=num;
//建堆
creat();
//刪除堆頂元素,連續刪除n次,其實也就是從小到大把數輸出來
for(i=1;i<=num;i++)
} !!!!!!!!!!高能預警!!!!!!!!!!//
#includeusing namespace std;
int h[101];//用來存放堆的陣列
int n;//用來儲存堆中元素的個數,也就是堆的大小
//交換函式,用來交換堆中的兩個元素的值
void swap(int x,int y)
//向下調整函式
void siftdown(int i)
else
t=i;
//如果它有右兒子,再對右兒子進行討論
//由於堆是完全二叉樹,所以堆中任意乙個結點的右孩子(存在的情況下)編號均滿足i*2+1<=n
if(i*2+1<=n)
} //如果發現最小的結點編號不是自己,說明子結點中有比父結點更小的
if(t!=i)
else
flag=1;//否則說明當前的父結點已經比兩個子結點都要小了,不需要再進行調整了 }
}//建立堆的函式
void creat()
}//堆排序
void heapsort()
} int main()
n=num;
//建堆
creat();
//堆排序
heapsort();
//輸出
for(i=1;i<=num;i++)
return 0;
}*/
堆 神奇的優先佇列 上
堆是什麼?是一種特殊的完全二叉樹,就像下面這棵樹一樣。有沒有發現這棵二叉樹有乙個特點,就是所有父結點都比子結點要小 注意 圓圈裡面的數是值,圓圈上面的數是這個結點的編號,此規定僅適用於本節 符合這樣特點的完全二叉樹我們稱為最小堆。反之,如果所有父結點都比子結點要大,這樣的完全二叉樹稱為最大堆。那這一...
堆 神奇的優先佇列 上 經典
原文章 堆是什麼?是一種特殊的完全二叉樹,就像下面這棵樹一樣。有沒有發現這棵二叉樹有乙個特點,就是所有父結點都比子結點要小 注意 圓圈裡面的數是值,圓圈上面的數是這個結點的編號,此規定僅適用於本節 符合這樣特點的完全二叉樹我們稱為最小堆。反之,如果所有父結點都比子結點要大,這樣的完全二叉樹稱為最大堆...
啊哈!演算法 演算法11 堆 神奇的優先佇列(上)
堆是什麼?是一種特殊的完全二叉樹,就像下面這棵樹一樣。有沒有發現這棵二叉樹有乙個特點,就是所有父結點都比子結點要小 注意 圓圈裡面的數是值,圓圈上面的數是這個結點的編號,此規定僅適用於本節 符合這樣特點的完全二叉樹我們稱為最小堆。反之,如果所有父結點都比子結點要大,這樣的完全二叉樹稱為最大堆。那這一...