参考数据结构与算法分析,实现堆排序
堆排序的思想如下,先构建一个最大堆,本文默认的为最大堆,即父节点是最大的,而左右子树的大小则没有明确的区分,然后实现排序
#include <iostream>
using namespace std;
void heapsort(int A[],int i,int N)
{
int child,temp=10;
//int child;
//for(int temp=A[i];2*i+1<N;i=child)
for(temp=A[i];2*i+1<N;i=child)
{
child=2*i+1;
if(child!=(N-1)&&A[child+1]>A[child])
child++;
if(temp<A[child])
A[i]=A[child];
else
break;
}
A[i]=temp;
}
int main()
{
int A[7]={31,41,59,26,53,58,97};
for(int i=7/2;i>=0;i--)
heapsort(A,i,7);
for(int i=6;i>=0;i--)
{
int temp=A[i];
A[i]=A[0];
A[0]=temp;
heapsort(A,0,i);
}
for(int i=0;i<7;i++)
cout<<A[i]<<" ";
cout<<endl;
return 0;
}
通过上述的方法,可以实现堆排序