单链表实现冒泡排序算法
时间: 2023-07-10 12:13:20 浏览: 131
单链表实现冒泡排序算法的思路如下:
1. 遍历链表,比较相邻两个结点的大小,如果前一个结点的值大于后一个结点的值,则交换它们的值。
2. 继续遍历链表,重复以上步骤,直到链表中所有结点都被排序。
3. 当一轮比较结束后如果没有发生任何交换,则说明已经完成了排序,可以结束算法。
实现代码如下:
```c++
void bubble_sort(ListNode *head) {
if (!head || !head->next) return;
ListNode *p, *q, *tail = NULL;
int exchange = 1;
while (exchange && head->next != tail) {
exchange = 0;
p = head;
q = p->next;
while (q != tail) {
if (p->val > q->val) {
int tmp = p->val;
p->val = q->val;
q->val = tmp;
exchange = 1;
}
p = p->next;
q = q->next;
}
tail = p;
}
}
```
其中,head 是链表的头结点,每次比较相邻两个结点的大小,如果前一个结点的值大于后一个结点的值,则交换它们的值。每一轮比较结束后,将尾结点 tail 指向当前已排序好的最后一个结点,这样下一轮比较时就不用再考虑已经排序好的结点了,可以提高效率。当一轮比较结束后如果没有发生任何交换,则说明已经完成了排序,可以结束算法。
阅读全文