template<typename T>
void maxHeapify(T arr[], int index, int heapSize) {
int maxIndex = index;
int left = 2 * index + 1;
int right = left + 1;
if (left < heapSize && arr[index] < arr[left]) {
maxIndex = left;
}
if (right < heapSize && arr[maxIndex] < arr[right]) {
maxIndex = right;
}
if (maxIndex != index) {
swap(arr[maxIndex], arr[index]);
maxHeapify(arr, maxIndex, heapSize);
}
return;
}
template<typename T>
void build(T arr[], int heapSize) {
for (int i = heapSize / 2 - 1; i >= 0; i--) {
maxHeapify(arr, i, heapSize);
}
}
template<typename T>
void sort(T arr[], int heapSize) {
build(arr, heapSize);
for (int i = heapSize - 1; i > 0; i--) {
swap(arr[0], arr[i]);
maxHeapify(arr, 0, i);
}
}
template<typename T>
void swap(T &a, T &b) {
T temp = a;
a = b;
b = temp;
}
C++的堆排序
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
推薦閱讀更多精彩內(nèi)容
- 上一篇C++基礎(chǔ)入門(mén)之模板堆排序(上):模板上的list的創(chuàng)造與操作 其實(shí)接下來(lái)就很簡(jiǎn)單了,只要把大眾版的堆排序翻...
- 一、堆的概念 概念:堆作為一種數(shù)據(jù)結(jié)構(gòu)是一種完全二叉樹(shù)。所謂完全二叉樹(shù),可能有些書(shū)本有很晦澀難懂的概念。就我的理解...
- 選擇排序 對(duì)于任何輸入,時(shí)間為O(n*n); 冒泡排序 最優(yōu)(對(duì)于升序的數(shù)組,因?yàn)榧尤肓艘粋€(gè)跳出判斷):O(n),...
- 整段源碼鏈接C++的模板元堆排序 要點(diǎn) 組建數(shù)據(jù)結(jié)構(gòu)list 組建對(duì)list的各種基本操作 堆排序中組建堆排序個(gè)個(gè)...
- 漂泊的船 最懷念無(wú)風(fēng)浪的港灣 卻從不作過(guò)久的停留 它害怕生銹 年輕的浪子 常夢(mèng)見(jiàn)母親的呢喃 但只字不提 他擔(dān)憂滿腔...