у меня проблемы с моей функцией downheap - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь написать функцию кучи для моей кучи, но она продолжает зависать в бесконечном цикле, и я не уверен, почему. Кроме того, я не уверен, как это сделать, чтобы он не проверял за пределами моей последней переменной, которая является частью проблемы, я думаю,

Вот где она застревает else if(2*i+1 <= last&& arr[2*i+1]!=0 && 2*i > last)

void heap::downheap()
{
int temp= 0;
int i = 1;
while(i < last)
{

//      if(2*i > last|| 2*i+1 >last){
//      cout<< "error"<<endl;
//}
        if(2*i <= last && 2*i+1 <=last){
         if(arr[i] < arr[2*i] && arr[2*i] > arr[2*1+1])
{

                cout<< "left";
                temp = arr[i];
                arr[i] = arr[2 *i];
                arr[2*i] = temp;
                if(arr[i*2] > arr[i*2+1])
                i = i*2;
                else
                i = i * 2+1;
}
else if(arr[i] < arr[i*2+1] && arr[2*i+1] > arr[2*1])
{

                cout<< "right";
                temp = arr[i];
                arr[i] = arr[2 *i+1];
                arr[2*i+1] = temp;
                //i++;// = i*2+1;
                if(arr[i*2+1] > arr[i*2])
                i = i*2+1;
                else
                i = i * 2;
}
else if(arr[i] > arr[i*2] || arr[i*2+1])
{
                if(arr[i*2+1] > arr[i*2])
                i = i*2+1;
                else
                i = i * 2;

}
}
else if(2*i <= last && arr[2*i]!=0 && 2*i+1 > last)
{
                temp = arr[i];
                arr[i] = arr[2 *i];
                arr[2*i] = temp;
                //i++;// = i*2;
                if(arr[i*2] > arr[i*2+1])
                i = i*2;
                else
                i = i * 2+1;

}
else if(2*i+1 <= last&& arr[2*i+1]!=0 && 2*i > last)
{
                temp = arr[i];
                arr[i] = arr[2 *i+1];
                arr[2*i+1] = temp;
                //i++;// = i*2+1;
                if(arr[i*2+1] > arr[i*2])
                i = i*2+1;
                else
                i = i * 2;
}
}
}

это насколько я получаю -1 для удаления 0 до остановки: -1 удалено 8 7 1 6 4 3 2 5 -1 для удаления 0 до остановки: -1 удалено 7 6 1 2 4 3 5 -1 доудалить 0 до остановки: -1

...