資料結構與演算法之堆排序

2021-09-14 03:12:14 字數 542 閱讀 9723

堆排序:先用n個待排序的元素來初始化乙個大根堆,然後從堆中逐個提取元素(刪除)。每次都取堆頂的元素,將其放在序列最後面,然後將剩餘的元素重新調整為最大堆,依次類推,最終得到排序的序列。結果這些元素按照非遞增的順序排列。初始化時間為o(n),每次刪除的時間為o(logn),因此總時間為o(nlogn)。

#include#includeusing namespace std;

// 遞迴方式構建大根堆(len是arr的長度,index是第乙個非葉子節點的下標)

void adjust(vector&arr, int len, int index) }

// 堆排序

void heapsort(vector&arr, int size)

// 調整大根堆

for(int i = size - 1; i >= 1; i--)

} int main()

; heapsort(arr, arr.size());

for(int i=0;ireturn 0;

}

演算法與資料結構之堆排序

堆結構 就是一顆完全二叉樹,二叉樹是不存在的,可以腦補,真正實現堆結構的是陣列 葉節點 沒有左右孩子的節點 滿二叉樹 最後一層都是葉節點,並且填滿最後一層 完全二叉樹 滿二叉樹屬於完全二叉樹,滿二叉樹從右往左依次去葉節點形成的樹就是完全二叉樹 陣列下標位置為i,在不越界的情況下 2 i 1是i位置數...

演算法與資料結構 之堆排序

堆的應用 優先佇列的主要操作 例子 在n個元素中選出前m個元素?比如,在100萬個元素中選出前100名 排序,nlogn 優先佇列,nlogm 維護乙個容量為m的最小堆,遍歷完100萬個陣列之後,形成的最小堆中的m個元素就是最小的 總共n個請求,使用普通陣列或者順序陣列,最差情況o n 2 使用堆,...

資料結構與演算法之堆排序

這是我最近幾天寫排序的最後乙個演算法排序了 我覺得這個堆排序和歸併排序可以說是這幾個演算法中寫起來最困難的 了。堆排序 是指利用堆這種資料結構所設計的一種排序演算法。因為堆是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點,所以建堆就和建樹一樣,必須...