#include <stdio.h>
void Swap(int arr[], int m, int n)
{
if (m == n) return;
arr[m] += arr[n];
arr[n] = arr[m] - arr[n];
arr[m] = arr[m] - arr[n];
}
int Max(int a, int b, int c)
{
if (a >= b)
{
if (a >= c) return a;
else return c;
}
else
{
if (b >= c) return b;
else return c;
}
}
void HeapAdjust(int arr[], int s, int e)
{
int left = s * 2 + 1;
int right = left + 1;
if (left > e) return;
else if (right > e)
{
if (arr[s] >= arr[left]) return;
else
{
Swap(arr, s, left);
HeapAdjust(arr, left, e);
}
}
else
{
int i = Max(arr[s], arr[left], arr[right]);
if (i == arr[s])
return;
else if (i == arr[left])
{
Swap(arr, s, left);
HeapAdjust(arr, left, e);
}
else
{
Swap(arr, s, right);
HeapAdjust(arr, right, e);
}
}
}
void BuildHeap(int arr[], int num)
{
for (int i=int(num/2-1); i>=0; --i) //最后一個非葉子節(jié)點int(num/2-1)员寇,如果從1編號煮落,則為int(num/2)
{
HeapAdjust(arr, i, num-1);
}
}
int main(int argc, char * argv[])
{
printf("Hello World\n");
int array[] = {12, 33, 2, 34, 29, 101, 7, 23, 48, 100};
int len = sizeof(array)/sizeof(array[0]);
BuildHeap(array, len);
for (int i=len-1; i>0; --i) //條件i>0跃闹,因為循環(huán)語句中有i-1
{
Swap(array, 0, i);
HeapAdjust(array, 0, i-1);
}
for (int i=0; i<len; ++i)
{
printf("%d ", array[i]);
}
printf("\n");
}
堆排序
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門管削,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人渤涌,你說我怎么就攤上這事佩谣。” “怎么了实蓬?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長吊履。 經(jīng)常有香客問我安皱,道長,這世上最難降的妖魔是什么艇炎? 我笑而不...
- 正文 為了忘掉前任酌伊,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘居砖。我一直安慰自己虹脯,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布奏候。 她就那樣靜靜地躺著循集,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蔗草。 梳的紋絲不亂的頭發(fā)上咒彤,一...
- 文/蒼蘭香墨 我猛地睜開眼范咨,長吁一口氣:“原來是場噩夢啊……” “哼故觅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起湖蜕,我...
- 正文 年R本政府宣布,位于F島的核電站蚓聘,受9級特大地震影響腌乡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜夜牡,卻給世界環(huán)境...
- 文/蒙蒙 一与纽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦急迂、人聲如沸影所。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽猴娩。三九已至,卻和暖如春听盖,著一層夾襖步出監(jiān)牢的瞬間胀溺,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- https://blog.csdn.net/qq_25800311/article/details/8976254...
- 原地堆排序思想 對于已經(jīng)“堆化”的數(shù)據(jù)嫉称,堆頂?shù)脑厥亲畲蟮模瑢?yīng)到數(shù)組就是數(shù)組的第一個元素是最大的灵疮,原地的堆排序就...
- 基礎(chǔ)堆排序和 Heapify 這一節(jié)我們介紹兩個使用堆或者說基于堆的思想進(jìn)行排序的算法。 思路1:一個一個地往最大...
- 堆排序就是把最大堆堆頂?shù)淖畲髷?shù)取出蒿赢,將剩余的堆繼續(xù)調(diào)整為最大堆润樱,再次將堆頂?shù)淖畲髷?shù)取出(最大堆調(diào)整的遞歸運算),這...
- 堆基本概念 堆排序是一個很重要的排序算法羡棵,它是高效率的排序算法壹若,復(fù)雜度是O(nlogn),堆排序不僅是面試進(jìn)場考的...