首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于堆排序的有关问题,大家看下有关问题出在哪里了

2013-07-04 
关于堆排序的问题,大家看下问题出在哪里了。下面是我的排序函数:void heap::MaxHeapify(int i)//维护堆{int

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

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

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

热点排行