void trickleDown(int index,int a[],int currentSize)
{
int largerChild;
int temp=a[index];
while(index<currentSize/2)
{
int leftChild=2*index+1;
int rightChild=leftChild+1;
if(rightChild<currentSize&&a[leftChild]<a[rightChild])
largerChild=rightChild;
else
largerChild=leftChild;
if(temp>=a[largerChild])
break;
a[index]=a[largerChild];
index=largerChild;
}
a[index]=temp;
}
void heapSort(int a[],int len)
{
int length=len;
for(int j=length/2-1;j>=0;j--)
trickleDown(j,a,length);
for(int j=length-1;j>=0;j--)
{
swap(a[0],a[j]);
trickleDown(0,a,j);
}
}堆排序
最新推荐文章于 2024-06-09 16:03:45 发布
本文详细介绍了一种高效的排序算法——堆排序。通过递归的方式调整子树来维持堆的性质,并展示了如何利用该特性进行数组排序。文章提供了具体的实现代码,包括向下调整(trickleDown)过程和完整的堆排序流程。
31万+

被折叠的 条评论
为什么被折叠?



