关于堆排序的问题,大家看下问题出在哪里了。
下面是我的排序函数:
void heap::MaxHeapify(int i)//维护堆
{
int r,l,largest=i;
r=Right(i);
l=Left(i);
if(r<size && A[i]<A[r])
largest=r;
if(l<size && A[largest]<A[l])
largest=l;
if(largest!=i)
MaxHeapify(largest);
}
void heap::BuildMaxHeap()//建堆
{
size=length;
for(int i=length/2;i>=0;i--)
{
MaxHeapify(i);
}
}
void heap::HeapSort()//排序
{
BuildMaxHeap();
int temp;
for(int j=length;j>0;j--)
{
temp=A[length];
A[length]=A[0];
A[0]=temp;
size--;
MaxHeapify(0);
}
}
不知道问题出在哪里了啊。。我运行的结果是没有排序原样输出了。 堆排序
[解决办法]
又是Length又是size,到底分别是什么意思?
void heap::BuildMaxHeap()//建堆
{
size=length;
//这句让HeapSort中的size--完全失去了作用。
//是不是应该为length=size
//还是HeapSort中应该是length--?
for(int i=length/2;i>=0;i--)
{
MaxHeapify(i);
}
}
[解决办法]
size--;//这个size--白做了。
MaxHeapify(0);
[解决办法]
哦,是我看错了。抱歉。