2017-02-14 6 views
-1

Я пытаюсь сортировать связанный список.Пропущенные узлы при попытке сортировать связанный список

Код не работает должным образом, он пропускает некоторые узлы при проверке того, как минимизировать проблемы при сортировке узлов.

void sortNodes(){ 
    node *parrser = head, *current = NULL; 
    node*temp; 
    while (parrser->next!= NULL){ 
     current = head; 
     while (current->next!= NULL){ 
      // cout << current->no << "next" << current->next->no; 
      if (current->no > current->next->no){ 
       temp = current->next; 
       current->next = temp->next; 
       temp->next = current; 
      } 
      else 
       current = current->next; 
     } 
     parrser = parrser->next; 
    } 
} 
+0

Пожалуйста, отметьте вопрос с соответствующими языковыми тегами и объясните, что именно неправильно: в каких случаях пропускаются узлы, как вы это проверяете и т. Д. –

+0

связанные списки лучше отсортировать, используя [merge sort] (https: //en.wikipedia.org/wiki/Merge_sort) – sp2danny

ответ

0

Код сравнивает текущий-> нет с током-> следующий-> нет. Если вы не в порядке, код должен меняться текущим с помощью current-> next, но для этого требуется обновлять любые текущие точки, которые код в данный момент не выполняет.

Сортировка пузырьков в этом случае перемещает узел с относительно большим числом в конец списка на каждый внутренний цикл. Внешний цикл должен начинаться в начале списка каждый раз, так что узел с наименьшим числом заканчивается в начале списка. Используйте флаг подкачки, который устанавливается, если выполняются какие-либо свопы, и если он не будет установлен после прохода, сортировка будет выполнена.

Вместо сортировки пузырьков было бы проще создать новый пустой отсортированный список, а затем удалить узлы из исходного списка и вставить их в порядке в первоначально пустой отсортированный список.

Смежные вопросы