do..while 在链表的冒泡排序中循环

do..while loop in bubble sort for linked list

我试图理解这段代码,但我不理解 do..while 循环与那个 while(swapped)。停止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); 
} 

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

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

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

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