#include<iostream>
using namespace std;
void heapify(int a[],int len,int top)
{
//更改堆顶元素后,维持堆的性质
while(top < len)
{
int left=2*top+1,right=2*top+2;
int largest;
if(left < len && a[top]<a[left])
{
largest=left;
}
else
{
largest=top;
}
if(right < len && a[largest]<a[right])
{
largest=right;
}
if(largest==top)
{
break;
}
else
{
int tmp=a[largest];
a[largest]=a[top];
a[top]=tmp;
top=largest;
}
}
}
void buildHeap(int a[],int len)
{
for(int i=(len-2)/2;i>=0;i--)
{
heapify(a,len,i);
}
}
void heapSort(int a[],int len)
{
buildHeap(a,len);
for(int i=len-1;i!=0;i--)
{
//swap
int tmp=a[i];
a[i]=a[0];
a[0]=tmp;
//heapify
heapify(a,--len,0);
}
}
int main()
{
int a[]={23,123,-2,0,98,1,4,6,8,55,-2,};
int len=(sizeof(a)/sizeof(*a));
heapSort(a,len);
for(int i=0;i!=len;i++)
{
cout<<a[i]<<endl;
}
return 0;
}
堆排序
最新推荐文章于 2023-09-21 13:21:58 发布