建立堆之后就是对堆的简单选择,不断的求出最大的那一个数
#include<iostream>
using namespace std;
void Swap(int r[],int i, int j)
{
int t = r[i];
r[i] = r[j];
r[j] = t;
}
void Sink(int k,int n,int r[])
{
while (2 * k+1 <= n) //具有左孩子
{
int i = 2 * k+1;
if (i + 1 <= n&&r[i+1]>r[i]) //具有右孩子,而且右孩子值大于左孩子
{
i++;
}
if (r[i] > r[k])
{
Swap(r, i, k);
}
k = i; //下浮
}
}
void CreateHeap(int r[],int n)
{
for (int i = (n-1)/2; i >= 0; i--)
{
Sink(i, n, r);
}//从0开始
}
void HeapSort(int r[],int n)
{
CreateHeap(r, n);
while (n >= 1)
{
Swap(r, 0, n);
Sink(0, --n, r);
}
}
int main() {
int r[5] = {1,5,3,4,2};
HeapSort(r, 4); //n是最后一个元素的索引
for (int i = 0; i < 5; i++)
{
cout << r[i] << " ";
}
return 0;
}
163

被折叠的 条评论
为什么被折叠?



