【问题标题】:Skipped nodes when trying to sort linked list尝试对链表进行排序时跳过的节点
【发布时间】:2017-02-14 11:21:12
【问题描述】:

我正在尝试对链表进行排序。

代码不能正常工作,它跳过了一些节点来检查如何在对节点进行排序时最小化问题。

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;
    }
}

【问题讨论】:

  • 请用适当的语言标签标记问题并解释到底是什么错误:在什么情况下节点被跳过,你如何检查,等等。
  • 链表最好使用merge sort进行排序

标签: c++ sorting linked-list bubble-sort


【解决方案1】:

代码将 current->no 与 current->next->no 进行比较。如果乱序,代码应该用 current->next 交换 current->next,但这需要更新任何指向 current 的点,而代码当前没有这样做。

在这种情况下,冒泡排序将具有相对最大数字的节点移动到每个内部循环的列表末尾。外层循环每次都需要从链表的开头开始,以使编号最小的节点在链表的最前面结束。使用交换标志,如果任何交换完成则设置,如果在通过后未设置,则排序完成。

与冒泡排序不同,创建一个新的空排序列表会更简单,然后从原始列表中删除节点并将它们按顺序插入到最初为空的排序列表中。

【讨论】:

    猜你喜欢
    • 2021-02-01
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 2014-08-31
    相关资源
    最近更新 更多