Связанный список Bubblesort не совсем прав

Я работаю над алгоритмом сортировки пузырьков для связанного списка. Он перемещает данные, но не совсем правильно сортирует данные. На данный момент я беспокоюсь только о связанных списках целых. Где проблема? Спасибо большое.

void List::linkedListBubbleSort()
{
bool swap = true;
Node * temp = firstNode;
Node * current;

if(firstNode == 0)
{
cout << "List is empty." << endl;
return;
}

else
{
while(swap == true)
{
for(current = firstNode; current != NULL && current->next != NULL; current = current->next)
{
if(current->data > current->next->data)
{
swap = true;
temp->data = current->data;
current->data = current->next->data;
current->next->data = temp->data;
}
else
swap = false;
}

}

0

Решение

Вам не нужно использовать while (swap == true), потому что в какой-то момент, когда if (current-> data> current-> next-> data) вернет false, тогда ваш верхний цикл, в то время как (swap == true) не позволит вам выполнить итерацию далее.

    else
{
for(current = firstNode; current != NULL && current->next != NULL; current = current->next)
{
if(current->data > current->next->data)
{
temp->data = current->data;
current->data = current->next->data;
current->next->data = temp->data;
}

}

}
0

Другие решения

  1. Вы используете темп, который указывает на первый узел. В результате при обмене вы повредите данные.
    2.Вы останавливаетесь на первом свопе, вам нужно остановиться только после того, как вы закончили, чтобы пройти весь список, и своп не был выполнен.
  2. алгоритм не верный. Должно быть две петли … поиск пузырьковой сортировки.
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector