用数组模拟完全二叉树实现堆排序
#include<iostream>
using namespace std;
void heapAdjust(int array[],int i,int j)
{
int child,largest;
child=i*2;
if(child+1<=j&&array[child]<array[child+1])
child++;
if(child<=j&&array[i]<array[child])
{
array[i]=array[i]^array[child];
array[child]=array[i]^array[child];
array[i]=array[i]^array[child];
heapAdjust(array,child,j);
}
return ;
}
void heap_sort(int array[],int n)
{
int i,j,k;
for(i=n/2;i>0;i--)
{
heapAdjust(array,i,n);
}
int tmp=array[1];
array[1]=array[n];
array[n]=tmp;
for(i=n-1;i>0;i--)
{
heapAdjust(array,1,i);
int tmp=array[1];
array[1]=array[i];
array[i]=tmp;
}
}
int main()
{
int array[100];
int t;
while(cin>>t)
{
int i,j,k;
for(i=1;i<=t;i++)
{
cin>>array[i];
}
heap_sort(array,t);
for(i=1;i<=t;i++)
cout<<array[i]<<" ";
cout<<endl;
}
}