请用c语言链表知识写一个排序函数,要求能将链表由大到小排序
时间: 2023-07-25 13:08:41 浏览: 35
以下是使用 C 语言链表实现的排序函数,能将链表由大到小排序:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
void insert(Node** head, int data) {
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->data = data;
new_node->next = NULL;
if (*head == NULL) {
*head = new_node;
return;
}
Node* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = new_node;
}
void print(Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
void swap(Node** left, Node** right) {
int temp = (*left)->data;
(*left)->data = (*right)->data;
(*right)->data = temp;
}
void sort(Node** head) {
if (*head == NULL) {
return;
}
Node* current = *head;
Node* index = NULL;
while (current != NULL) {
index = current->next;
while (index != NULL) {
if (current->data < index->data) {
swap(¤t, &index);
}
index = index->next;
}
current = current->next;
}
}
int main() {
Node* head = NULL;
insert(&head, 4);
insert(&head, 2);
insert(&head, 1);
insert(&head, 5);
insert(&head, 3);
printf("Before sorting: ");
print(head);
sort(&head);
printf("After sorting: ");
print(head);
return 0;
}
```
在主函数中,我们首先创建一个空链表,并使用 `insert()` 函数向其中添加一些数据。然后,我们打印链表中的元素,调用 `sort()` 函数,该函数会将链表中的元素按照从大到小的顺序进行排序,最后我们再次打印链表中的元素,以验证排序是否成功。