基于c++的堆的升序排序
#include <iostream>
using namespace std;
int a[100]={0,1,2,3,4,5};
int n=5;
void swim(int k)
{
//创建大顶堆,与双亲比遇见小的就上调到合适位置
int m=k/2;
while(a[k]>a[m])
{
swap(a[k],a[m]);
k=m;
m=k/2;
if(k==1)
break;
}
}
void sink_em(int x,int end)
{
int j=2*x;
while(j<=end)
{
if(a[j]<=a[j+1]&&j+1<=end)
j++;
if(a[j]>a[x])
swap(a[j],a[x]);
x=j;
j=x*2;
}
}
void large_heap()
{
int i=n/2;
while(1)
{
sink_em(i,n);
i--;
if(i==0)
break;
}
}
void jianhuan()
{
int i=n;
while(i>1)
{
swap(a[1],a[i]);
i--;
sink_em(1,i);
}
}
void print(int a[],int n)
{
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
}
int main()
{
/*
1、构建大顶堆
2、交换首尾
3、排序结束、输出
*/
large_heap();
print(a,5);
cout<<endl;
jianhuan();
print(a,5);
return 0;
}