В настоящее время я работаю со структурой кучи, которая должна использоваться для сортировки чисел в массиве.Я сделал что-то подобное в коде, когда хочу отсортировать структуру, когда извлекаю (удаляю из очереди) элемент из кучи.
template<typename T>
inline void dHeap<T>::reHeapDown(int root, int bottom)
{
int minChild;
int rightChild;
int leftChild;
int temp;
// Get index of root's right/left child
leftChild = root * 2 + 1;
rightChild = root * 2 + 2;
//Then we are not done with re-heaping
if (leftChild <= bottom)
{
if (leftChild == bottom)
{
minChild = leftChild;
}
else
{
if (arr[leftChild] <= arr[rightChild])
minChild = leftChild;
else
minChild = rightChild;
}
if (arr[root] > arr[minChild])
{
// Swap these two elements
temp = arr[root];
arr[root] = arr[minChild];
arr[minChild] = temp;
// Make recursive call till reheaping completed
reHeapDown(minChild, bottom);
}
}
}
Я думал, что самое низкое значение в куче всегда будетбыть в корне, и это значение, которое я буду вставлен (исключен) в моей функции поп.Но у меня возникла проблема с тем, что она не будет правильно сортировать кучу.что-то не так с моей логикой в этой функции, и если да, то где это?