c语言链表的冒泡排序算法
时间: 2023-07-26 22:13:02 浏览: 109
冒泡排序c语言算法
链表的冒泡排序算法与数组的冒泡排序算法类似,都是每次比较相邻两个元素的大小,根据需要交换它们的位置,重复这个过程直到没有交换发生为止。但是链表的冒泡排序需要注意一些细节问题。
具体实现方法如下:
1. 定义三个指针,p、q、tail,其中 p 和 q 分别指向相邻的两个节点,tail 指向链表的末尾。
2. 外层循环控制排序的轮数,内层循环遍历链表并进行比较交换。
3. 在内层循环中,如果 p 的值大于 q 的值,就交换它们的值。
4. 每一轮内层循环结束后,把 tail 指向当前最后一个已经排好序的节点。
5. 当没有发生交换时,说明链表已经排好序,排序结束。
完整代码实现如下:
```c
void bubble_sort(struct node *head) {
if (head == NULL) {
return;
}
struct node *p, *q, *tail = NULL;
int exchange = 1;
while (exchange && head->next != tail) {
exchange = 0;
p = head;
q = p->next;
while (q != tail) {
if (p->data > q->data) {
int tmp = p->data;
p->data = q->data;
q->data = tmp;
exchange = 1;
}
p = p->next;
q = q->next;
}
tail = p;
}
}
```
注意,这里的链表节点使用了结构体 node 来表示,其中 data 表示节点的值,next 指向下一个节点。
阅读全文