void AdjustHeap(int *a, int len, int i)
{
int left = i * 2 + 1;
int right = i * 2 + 2;
//叶节点退出
if( left >= len ) return;
int largest;
if(left<len &&a[left] > a[i])
largest = left;
if(right<len && a[right] > a[largest])
largest = right;
if(i != largest)
{
Swap(&a[i],&a[largest]);
AdjustHeap(a,len,largest);
}
}
void BuildSort(int *a, int len)
{
//建立大顶堆
int i = 0;
for( i = (len-1)/2; i >=0 ; i--)
{
AdjustHeap(a,len,i);
}
//最大元素放到最后,调整剩余元素为大顶堆
for( i = len-1; i >=0 ; i--)
{
Swap(&a[0],&a[i]);
AdjustHeap(a,i,0);
}
}
堆排序
最新推荐文章于 2024-09-04 23:05:17 发布