使用qsort对一个链表进行排序C语言
时间: 2024-05-12 14:14:44 浏览: 114
在C语言中,使用qsort排序函数对链表进行排序需要以下步骤:
1. 定义一个结构体来存储链表节点的值和指向下一个节点的指针。
```
struct Node {
int data;
struct Node* next;
};
```
2. 定义一个数组来存储链表节点的值,将链表中的值复制到数组中。
```
int arr[n];
struct Node* temp = head;
for (int i = 0; i < n; i++) {
arr[i] = temp->data;
temp = temp->next;
}
```
3. 使用qsort函数对数组进行排序。
```
qsort(arr, n, sizeof(int), compare);
```
其中,compare是一个比较函数,用于指定排序的方式。例如:
```
int compare(const void* a, const void* b) {
return (*(int*)a - *(int*)b);
}
```
4. 将排好序的数组中的值复制回链表中。
```
temp = head;
for (int i = 0; i < n; i++) {
temp->data = arr[i];
temp = temp->next;
}
```
完整代码如下:
```
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
int compare(const void* a, const void* b) {
return (*(int*)a - *(int*)b);
}
void sortList(struct Node* head, int n) {
int arr[n];
struct Node* temp = head;
for (int i = 0; i < n; i++) {
arr[i] = temp->data;
temp = temp->next;
}
qsort(arr, n, sizeof(int), compare);
temp = head;
for (int i = 0; i < n; i++) {
temp->data = arr[i];
temp = temp->next;
}
}
int main() {
struct Node* head = (struct Node*)malloc(sizeof(struct Node));
head->data = 3;
head->next = (struct Node*)malloc(sizeof(struct Node));
head->next->data = 1;
head->next->next = (struct Node*)malloc(sizeof(struct Node));
head->next->next->data = 2;
head->next->next->next = NULL;
sortList(head, 3);
struct Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
return 0;
}
```
阅读全文