演算法導論 堆排序 優先佇列

2021-07-09 11:56:52 字數 1725 閱讀 6844

二叉堆是乙個陣列,可以被看做乙個近似的完全二叉樹。

性質:

建堆 可以使用自底向上的方法利用過程maxheapify(向下調整堆)把陣列a[1-n]轉換為堆。

偽**

向下調整堆maxheapify

偽**

演算法描述

3.向上調整堆

**

//向上調整堆

private

void adjustup(int a,int

index)

}

向上調整的操作過程中,當前元素會不斷地與其父節點進行比較,如果當前元素的關鍵字較大,則當前元素與其父節點進行交換。這一過程會不斷地重複,直到當前元素的關鍵字小於其父節點時終止,因為此時已經重新符合了最大堆的性質。

}//建堆

private

static

void

buildmaxheap(int a,int heapsize)

}//向下調整堆,選擇左右子樹中比當前節點大的值進行交換,並繼續向下遞迴,直至到達樹底或子樹已滿足堆的性質

//返回最大鍵字的元素

public

int maximum()

//去掉並返回最大鍵值

public

int extractmax()

//將第index位的關鍵字增加到k

public

void increasekey(int

index,int k)

}//向上調整堆

private

void adjustup(int a,int

index)

}//向下調整堆

private

void adjustdown(int a,int

index,int heapsize) }}

演算法導論 堆排序 堆實現的優先佇列

時間複雜度 o nlgn 空間複雜度 具有空間原址性,即o n 表示堆的陣列包括兩個屬性 length是陣列的長度,heap size是堆的大小,某些操作要求某些資料不在堆中 把陣列建成乙個最大堆,就能利用堆實現最大優先佇列了 include using namespace std define p...

演算法導論 堆排序

堆排序演算法 heapsort max heapify過程,其執行時間為 lg n 是保持最大堆性質的關鍵 build max heap過程,以線性時間執行,可以在無序的輸入陣列基礎上構造出最大堆 heapsort過程,執行時間 n lg n 對乙個陣列原地進行排序 heapsort過程 1 建最大...

演算法導論 堆排序習題

1.怎樣利用最大 小 堆構成的優先實現先進先出佇列或者棧 開始看這道題沒有弄清以什麼優先,原來是先進先出佇列只要保證先進來優先順序高,棧保證後進來優先順序高,然後每次彈出堆頂元素即可 2.如何在logn時間裡刪除乙個元素 思路和如何在堆中增加乙個元素是一樣的,因為堆要的形狀要保證是一顆完全二叉樹,決...