#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
#define LEFT(i) 2*(i)
#define RIGHT(i) 2*(i)+1
void h_swap(int &a,int &b)
{
int t=a;
a=b;
b=t;
}
void max_heapfy(int a[],int i,int size)
{
int max;
int l;
int r;
l=LEFT(i);
r=RIGHT(i);
if(l<=size&&a[l]>a[i]){
max=l;
}
else{
max=i;
}
if(r<=size&&a[r]>a[max]){
max = r;
}
if(max!=i)
{
h_swap(a[max],a[i]);
max_heapfy(a,max,size);
}
}
void BuildHeap(int a[],int size)
{
for(int i=size/2;i>=1;i--)
{
max_heapfy(a,i,size);
}
}
void print(int a[],int n)
{
int i=1;
while(i<=n)
{
cout<<a[i]<<" ";
i++;
}
cout<<endl;
}
void HeapSort(int a[],int size)
{
BuildHeap(a,size);
print(a,size);
int len = size;
for(int i=size;i>=2;--i)
{
h_swap(a[i],a[1]);
len--;
max_heapfy(a,1,len);
}
}
int main()
{
int a[101];
int size;
cout<<"Please input size(1-100):";
cin>>size;
srand(time(0));
for(int i=1;i<=size;i++)
{
a[i]=rand()%100*size;
}
HeapSort(a,size);
print(a,size);
return 0;
}
heap排序
最新推荐文章于 2021-11-14 01:00:01 发布