資料結構與演算法 堆排序演算法回顧

2021-09-21 06:04:05 字數 928 閱讀 4323

堆排序是利用堆這種資料結構而設計的一種排序演算法,堆排序是一種選擇排序,它的最壞,最好,平均時間複雜度均為o(nlogn),它也是不穩定排序。

堆排序的應用場景主要有:topk問題,優先順序佇列等。

原理:

1.將存放在array[0,…,n-1]中的n個元素建成初始堆;

2.此時,堆頂元素該堆的最大值

3.將堆頂元素與堆底元素進行交換,則序列的最大值即已放到正確的位置;

4.但此時堆被破壞,將堆頂元素向下調整使其繼續保持大根堆的性質,再重複第3,4步,直到堆中僅剩下乙個元素為止。

堆排序1.初始化堆

public static void initheap();

確定最後乙個有子節點的節點

for(int i = heap.length/2-1;i>=0;i--)

}public static void adjustheap(int i);

確定最後乙個有子節點的節點

for(int i = heap.length/2-1;i>=0;i--)

//堆排序

for (int i = heap.length-1; i >0 ; i--)

}public static void adjustheap(int i,int length)

if(right

if(max==i)

//交換

swap(max,i);

i=max;

//確定該節點的左子節點和右子節點

right = i*2+2;

left = i*2+1;}}

資料結構與演算法 堆排序

1 堆的性質 堆是一棵完全二叉樹,除最後一層外每層都是滿的 元素個數為2 i 1 根節點為第1層 最後一層如果不滿則只缺少右邊葉結點。如果按照廣度優先,即從上至下,從左至右對節點編號。根節點序號為0,節點i的父節點是 i 1 2,左子節點是2 i 1。最小堆中任意父節點不能比子節點大,最大堆中任意父...

資料結構與演算法 堆排序

基礎概念 堆排序是利用堆這種資料結構而設計的一種排序演算法,堆排序是一種選擇排序,它的最壞,最好,平均時間複雜度均為o nlogn 它也是不穩定排序。通俗理解 將待排序序列構造成乙個大頂堆,此時,整個序列的最大值就是堆頂的根節點。將其與末尾元素進行交換,此時末尾就為最大值。然後將剩餘n 1個元素重新...

資料結構與演算法 堆排序

堆排序堆排序是指利用堆這種資料結構所設計的一種排序演算法。堆是乙個近似完全二叉樹的結構,並同時滿足堆的性質 即子節點的鍵值或索引總是小於 或者大於 它的父節點,堆排序的時間複雜度為o nlogn 來自維基百科 什麼是堆 堆是一種特殊的完全二叉樹,它的性質為 任意節點大於等於或者小於等於它的左右節點。...