ソートアルゴリズムの詳細については、プログラムでヒープソートを実装しようとしています。しかし、私は問題に取り組んでいます。ヒープソートの実装
私はこのようにメインでソートヒープを呼ぶ:
メイン:h_vectorはランダムで、ランダムなサイズのベクトルは、要素を命じている
heap_sort(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 ***
私はこれを引き起こしている可能性がありますかわからないです。私は、最初に私の寓意がベクトルの境界から外れているかもしれないと考えましたが、私は数回チェックして、どこに見えません。何か案は?あなたの助けを前もってありがとう。
if(right <= v.size() && v[right] > v[largest])
注:これを見て、right = v.size()
を今すぐ:max_heapify()
の非常に最初のinvokationで
範囲外と思われる場合は、すべての 'v [i]'呼び出しを 'v.at(i)'に置き換えることができます。 'i'がOOBであれば例外がスローされます。 –