二叉堆是乙個陣列,可以被看做乙個近似的完全二叉樹。
性質:
建堆 可以使用自底向上的方法利用過程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時間裡刪除乙個元素 思路和如何在堆中增加乙個元素是一樣的,因為堆要的形狀要保證是一顆完全二叉樹,決...