您的位置:首页 > 其它

堆排序------最大堆进行排序为例

2015-01-06 19:59 344 查看
<span style="font-size:18px;">#include<iostream>
using namespace std;
void maxheapify(int A[],int i,int length)
{
int left,right,largest;
bool flag=true;
while(flag&&i<=length)
{
left=i*2;
right=left+1;
largest=i;
flag=false;
if(left<=length&&A[i]<A[left])
{
largest=left;
flag=true;
}
if(right<=length&&A[largest]<A[right])
{
largest=right;
flag=true;
}
int temp=A[i];
A[i]=A[largest];
A[largest]=temp;
i=largest;
}
}
void heap_sort(int A[],int n)
{
int length=n;
while(length>1)
{
int temp=A[length];
A[length]=A[1];
A[1]=temp;
length=length-1;
maxheapify(A,1,length);
}
}
int main()
{
int n;
int p[100];
while(cin>>n)
{
int length=n;
for(int i=1;i<=n;i++)
cin>>p[i];
for(int i=length/2;i>=1;i--)//构造一个堆
maxheapify(p,i,n);
for(int i=1;i<=length;i++)//二叉堆形似一颗完全二叉树,可以输出进行判断
cout<<p[i]<<" ";
cout<<endl;
heap_sort(p,n);//进行堆排序
for(int i=1;i<=length;i++)
cout<<p[i]<<" ";
cout<<endl;
}
return 0;</span>
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐