堆排序,cpp實現

2021-08-06 06:54:58 字數 484 閱讀 5297

#include

using namespace std;

void swap(int &a,int &b)

/*初始建堆,實為對孩子所在列的插入排序*/

void buildheap(int a,int length)}}

}/*在每次刪除頂部元素後恢復堆,本質上從頂部開始,和左右孩子較大的孩子交換,一直到不能交換為止,時間效率為log2n*/

void recoverheap(int a,int size)else

if(a[max] > a[parent])else}}

/*堆排序*/

void sortheap(int a,int length)

cout << endl;}}

int main(int argc, char const *argv)

;sortheap(a,10);

return 0;

}

實現原地堆排序(CPP)

堆是一種非常有用的資料結構,我們可以利用大頂堆或者小頂堆這種資料結構完成堆排序,但是這樣會增加o n 的輔助空間,其實,真正的堆排序是可以在原地進行的,我們稱之為原地堆排序,今天我們就來實現一下原地堆排序吧。原地堆排序主要分兩個步驟 1.對陣列進行堆化 2.將最大元素與陣列末端元素交換,然後對前n ...

堆排序實現

今天抽空寫了個堆排序的演算法,廢話不多說,直接上源 include include includeusing namespace std define maxsize 6 void print int a,int size maxsize void percolate up int a,int si...

堆排序實現

1 堆排序演算法描述 1 定義 n個關鍵字序列kl,k2,kn稱為 heap 當且僅當該序列滿足如下性質 簡稱為堆性質 1 ki k 2i 且ki k 2i 1 1 i n 2 當然,這是小根堆,大根堆則換成 號。k i 相當於 二叉樹的非 葉子結點,k 2i 則是左子節點,k 2i 1 是右子節點...