演算法 堆排序(堆)

2021-10-17 19:11:51 字數 744 閱讀 3432

使用情形:

插入乙個數

求集合當中的最小值

刪除最小值

刪除任意乙個元素

修改任意乙個元素

用一維陣列儲存二叉樹,左兒子在陣列中為根節點在陣列中的位置的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...