使用情形:
插入乙個數
求集合當中的最小值
刪除最小值
刪除任意乙個元素
修改任意乙個元素
用一維陣列儲存二叉樹,左兒子在陣列中為根節點在陣列中的位置的2倍,右兒子在陣列中為根節點在陣列中的位置的二倍加一。
求當前堆的最小值
void
down
(int u)
}
輸入乙個長度為n的整數數列,從小到大輸出前m小的數。
第一行包含整數n和m。
第二行包含n個整數,表示整數數列。
共一行,包含m個整數,表示整數數列中前m小的數。
1≤m≤n≤105,
1≤數列中元素≤109
5 34 5 1 3 2
1 2 3
#include
#include
using
namespace std;
int h[
100100];
int siz =1;
void
down
(int u)
}int
main()
siz = n;
for(
int i = n /
2; i;
--i)
while
(m--
)return0;
}
原題鏈結 排序演算法(六) 堆排序
堆定義 堆是一種完全二叉樹,每個結點都大於等於其子結點的稱為大頂堆,每個結點都小於等於其子結點的稱為小頂堆。堆排序定義 將待排序的序列構造成乙個大頂堆,此時堆頂是最大值,將其移到序列最末端後,剩餘的序列重新構造乙個大頂堆,如此反覆直到得到乙個有序序列。時間複雜度 o nlogn 實現 public ...
排序演算法6 堆排序
堆排序可以看作是簡單選擇排序的一種的改進方法,平均複雜度為 o n log n 因此應用場合較多。其原理同簡單選擇排序相似 將資料分為已排序和未排序的兩部分,並且不斷的從未排序資料中選取最大 或最小 資料加入到已排序集合中。不同之處在於,堆排序採用了一種特殊的二叉堆結構來快速的尋找最大值。如下圖,首...
排序演算法 5 堆排序
這篇部落格從以下幾個方面來說 什麼是最大堆以及 實現 堆排序基礎 一次優化 提高效率 二次優化 原地堆排序,無需額外空間 1.什麼是最大堆以及 實現 這裡可以參考言簡意賅的部落格 堆與最大堆 2.堆排序基礎 import com.heap.maxheap import utils.createran...