【发布时间】: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 ask、how not to ask 和what'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