#include<iostream>
using namespace std;
void swap(int a[],int i,int j)
{
int tmp=a[i];
a[i]=a[j];
a[j]=tmp;
return ;
}
int Left(int a[],int p)
{
return p*2;
}
int Right(int a[],int p)
{
return p*2+1;
}
int Parent(int a[],int p)
{
return p/2;
}
void Heapity(int a[],int len,int p)
{
int left=Left(a,p);
int right=Right(a,p);
int max=p;
if(left<=len)
{
max=a[left]>a[max]?left:max;
}
if(right<=len)
{
max=a[right]>a[max]?right:max;
}
if(max!=p)
{
swap(a,max,p);
Heapity(a,len,max);
}
return ;
}
void BuildHeap(int a[],int len)
{
int i=len/2;
for(i=len/2;i>=1;i--)
{
Heapity(a,len,i);
}
return ;
}
void InsertNum(int a[],int len,int num)
{
len++;
int p=len;
while(p>1&&a[p]>a[Parent(a,p)])
{
a[p]=a[Parent(a,p)];
p=Parent(a,p);
}
return ;
}
int MaxNum(int a[],int len, int p)
{
int tmp=a[1];
a[1]=a[len];
len--;
Heapity(a,len,1);
return tmp;
}
int main()
{
int a[11]={0,4,1,7,5,8,3,2,9,6,10};
BuildHeap(a,10);
for(int i=0;i<10;i++)
{
cout<<MaxNum(a,10,1);
cout<<" ";
}
cout<<endl;
char ch;
cin>>ch;
exit(ch);
return 1;
}
堆排序
最新推荐文章于 2023-09-21 13:21:58 发布