读书人

关于堆排序的有关问题大家看下有关问

发布时间: 2013-07-04 11:45:51 作者: rapoo

关于堆排序的问题,大家看下问题出在哪里了。
下面是我的排序函数:

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);
}
}

[解决办法]
引用:
但是在HeapSort中只调用了一次Build,而且是在length改变之前啊。。所以其实应该没影响吧。而且我的输入是length=size的


size--;//这个size--白做了。
MaxHeapify(0);

[解决办法]
哦,是我看错了。抱歉。

读书人网 >C++

热点推荐