堆排序 大頂堆 非遞減序列

2021-08-25 12:17:52 字數 1294 閱讀 7305

堆的定義:如下,n個元素的序列當且僅當滿足下關係時,稱之為堆.

ki<= k2i ;ki

<= k2i+1 (小頂堆) 或者 ki >= k2i ;ki >= k2i+1 (大頂堆)

堆排序:建大頂堆,使堆頂元素與堆中最後乙個元素替代之(放置陣列尾,陣列尾為當前最大元素).,

堆的剩餘未排序的元素,建大頂堆,重複上述過程.

#include //已知(k1,k2……,kn)是堆,試寫乙個演算法將(k1,k2,……,kn,kn+1)調整為堆。 //按此思想寫乙個從空堆開始乙個乙個填入元素的建堆演算法 //(題示:增加乙個k n+1後應從葉子向根的方向調整) #define length 6 void headsort(int a,int n); void headadjust(int a,int s, int m); void headadjust(int *a,int head, int tail) a[head] = temp; //列印********************* for(int i = 0 ; i < length; i++) printf("/r/n"); //列印*********************列印結束 } // headadjust void headsort(int *a,int n) //列印********************* for(i = 0 ; i < length; i++) printf("/r/n"); //**********************列印結束 tmp = a[0]; a[0] = a[length-1]; a[length-1] = tmp; //列印********************** for(i = 0 ; i < length; i++) printf("/r/n"); //列印*********************列印結束 for(i = length-1; i>1; --i) printf("i's value:%d/n",i); } int main() { int n ; int a[1000] ; printf("input the number you want to sort :"); scanf("%d",&n); printf("please input the values :"); for(int i=0;i

堆排序(大頂堆)

ifndef maxheap define maxheap includeusing namespace std const int capacity 100 class maxheap void push const int data void initialize int a,int thesi...

堆排序之 大頂堆

堆的定義 設有n個元素的序列 1 2 解釋 如果讓滿足以上條件的元素序列 建堆的步驟 從最後乙個非終端結點開始往前逐步調整,讓每個雙親大於 或小於 子女,直到根節點為止。注意 終端結點 即葉子 沒有任何子女,無需單獨調整。建堆的具體做法 1 將原始序列轉換成完全二叉樹。2 從序號最大的非葉子節點開始...

堆排序詳解 大頂堆

堆的概念 堆是一顆順序儲存的完全二叉樹 每個結點的關鍵字都不大於其孩子結點的關鍵字,這樣的堆稱為小根堆 每個結點的關鍵字都不小於其孩子結點的關鍵字,這樣的堆稱為大根堆 對於n個元素的序列當且僅當下列關係之一的時候,稱之為堆 1 ri r2i 1 且 ri r2i 2 小根堆 2 ri r2i 1 且...