c语言冒泡排序算法对链表进行排序的函数
时间: 2023-08-24 19:15:31 浏览: 124
下面是使用冒泡排序算法对链表进行排序的示例代码:
```c
typedef struct Node {
int data;
struct Node *next;
} Node;
void bubble_sort(Node *head) {
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;
}
}
```
这个函数接受一个链表头指针作为参数,使用了三个指针p、q、tail,其中tail指向链表的最后一个元素(初始为NULL),exchange是一个标志位,用于表示本轮循环中是否发生了数据交换,初始为1表示要进行排序。
函数中使用了两层循环,外层循环控制排序的轮数,内层循环控制每一轮中的比较和交换操作。具体实现是将p指向链表头,将q指向p的下一个节点,不断遍历链表中的每个元素,如果p的值大于q的值,则交换它们的值,并将exchange标志位置为1。
内层循环结束后,将tail指向p,表示本轮循环中最后一个比较的元素是p,因为p之后的元素已经排好序了。如果本轮循环中没有发生数据交换,说明链表已经有序,可以退出循环。
最终,函数返回的链表是按照从小到大的顺序排列的。
阅读全文