정렬 알고리즘에 대해 자세히 알아 보려면 내 프로그램에서 힙 정렬을 구현하려고합니다. 그러나 나는 문제에 달려있다. 힙 정렬 구현
나는 종류의이 같은 주에 힙 전화 :홈페이지 : 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 일 때 예외를 던질 것입니다. –