我正在尝试在我的程序中实现堆排序以了解有关排序算法的更多信息。但是我遇到了一个问题。实现堆排序
我叫堆排序的主要是这样的:
主营:
heap_sort(h_vector);
凡h_vector是一个随机大小的矢量随机排序的元素。我的堆排序算法看起来像。
堆排序:
void max_heapify(std::vector<int>& v, int i)
{
int left = i + 1, right = i + 2;
int largest;
if(left <= v.size() && v[left] > v[i])
{
largest = left;
}
else
{
largest = i;
}
if(right <= v.size() && v[right] > v[largest])
{
largest = right;
}
if(largest != i)
{
std::swap(v[i], v[largest]);
max_heapify(v,largest);
}
}
void build_max_heap(std::vector<int>& v)
{
for(int i = v.size() - 2; i >= 0; --i)
{
max_heapify(v, i);
}
}
void heap_sort(std::vector<int>& v)
{
build_max_heap(v);
int x = 0;
int i = v.size() - 1;
while(i > x)
{
std::swap(v[i],v[x]);
++x;
--i;
}
}
每当我这种添加到我的节目,我得到了下面的错误。
错误:
*** glibc detected *** ./a.out: free(): invalid next size (normal): 0x096c82d0 ***
我不知道这可能是导致此。我一开始以为我的算法可能会超出载体的范围,但我已经检查过几次,我不知道它在哪里。有任何想法吗?感谢您的帮助提前。
如果你怀疑它出界了,你可以用'v.at(i)'代替所有'v [i]'调用。当'i'是OOB时,这将引发异常。 – 2012-02-14 14:54:13