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,循环就会继续。
我试图理解这段代码,但我不理解 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,循环就会继续。