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);
    }
}
Posted on 2010-09-20 22:12 邹敏 阅读(207) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理