【问题标题】:do..while loop in bubble sort for linked list [closed]do..while循环在链表的冒泡排序中[关闭]
【发布时间】:2020-08-20 13:06:10
【问题描述】:

我试图理解这段代码,但我不理解带有while(swapped)do..while 循环。停止while循环的条件是什么?

/* Bubble sort the given linked list */
void bubbleSort(struct Node *start) 
{ 
    int swapped; 
    struct Node *ptr1; 
    struct Node *lptr = NULL; 

    /* Checking for empty list */
    if (start == NULL) 
        return; 

    do
    { 
        swapped = 0; 
        ptr1 = start; 

        while (ptr1->next != lptr) 
        { 
            if (ptr1->data > ptr1->next->data) 
            {  
                swap(ptr1, ptr1->next); 
                swapped = 1; 
            } 
            ptr1 = ptr1->next; 
        } 
        lptr = ptr1; 
    } 
    while (swapped); 
} 

【问题讨论】:

  • 阅读关于冒泡排序... 内部循环让“冒泡”上升,最终条件发生在没有冒泡上升时。
  • @Boninissimo 函数不正确,因为指向头节点的指针不是通过引用传递的。那就是它不交换节点。它交换存储在节点中的值。但是这样的功能应该自己交换节点。
  • 欢迎来到 Stack Overflow!请在发布问题之前了解how to askhow not to askwhat's on-topic。我们需要正确理解问题,因此请添加所有必要的详细信息以澄清您的问题和/或(当与代码相关时)发布minimal complete reproducible example
  • 我们也希望您能够to do at least a little research 和/或(当与代码相关时)writing code to solve the issue您自己。 Stack Overflow 不是代码请求,也不是一般解释代码的教程服务。没有足够的信息来理解或重现问题或没有表现出任何解决问题的努力的问题将很快被关闭。
  • 是的,但我的问题具体是关于它是如何工作的..while 工作,Moray 回答了我的问题。所以我不明白你的争议。

标签: c linked-list bubble-sort


【解决方案1】:

当迭代中没有元素被交换时,循环停止。正如您在循环开头看到的,swapped 设置为 0。当一个元素不能交换时,程序进入条件if (ptr1->data > ptr1->next->data),在这种情况下,swapped 设置为 1(这是 @ 的 C 版本987654324@)。只要swapped 为 1,循环就会继续。

【讨论】:

  • 为了更清楚地说明最后一条语句,如果swappedwhile 子句中计算时具有非零值,则执行循环的新迭代whiledo ... while 循环不会在循环体执行期间循环条件变为错误时立即终止,这有时会引起混淆。
【解决方案2】:

根据您要按升序对链表进行排序的代码。

您从头开始遍历列表,如果当前节点的值大于下一个节点的值,则交换它们。

你这样做直到有交换要执行,这就是while (swapped) 的意思。

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 2018-05-18
    • 1970-01-01
    • 2012-02-10
    • 2017-05-26
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    相关资源
    最近更新 更多