void AdjustNode(double *Array,int position,int n)//n是数组中元素的个数,position是当前要调整的位置
{
int left_child=2*(position+1)-1;
int right_child=2*(position+1);
if (left_child>=n)
{
return;
}
double tmp;
if (Array[position]<Array[left_child])
{
tmp=Array[position];
Array[position]=Array[left_child];
Array[left_child]=tmp;
AdjustNode(Array,left_child,n);
}
if (Array[position]<Array[right_child])
{
tmp=Array[position];
Array[position]=Array[right_child];
Array[right_child]=tmp;
AdjustNode(Array,right_child,n);
}
}
void HeapSort(double *Array,int n)
{
for (int i=n/2;i>=0;i--)
{
AdjustNode(Array,i,n);
}
double tmp;
for (int i=0;i<n;i++)
{
tmp=Array[0];//每次取根节点元素
Array[0]=Array[n-i-1];//把最后一个元素放到根节点上
Array[n-i-1]=tmp;//把排好序的数字放到后面
AdjustNode(Array,0,n-i-1);
}
}