Я пытаюсь реализовать сортировку кучи в моей программе, чтобы узнать больше об алгоритмах сортировки.Однако я сталкиваюсь с проблемой.
Я называю сортировку кучи в main следующим образом:
Main:
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 ***
Я не уверен, что может быть причиной этого.Сначала я подумал, что мой алогрит может выходить за границы вектора, но я проверил несколько раз, и я не вижу, где.Есть идеи?Заранее спасибо за помощь.