c语言写链表的选择排序
时间: 2023-07-21 07:23:05 浏览: 48
下面是使用C语言实现链表的选择排序代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 链表节点结构体
typedef struct node {
int value;
struct node* next;
} Node;
// 创建节点
Node* create_node(int value) {
Node* node = (Node*)malloc(sizeof(Node));
node->value = value;
node->next = NULL;
return node;
}
// 释放节点
void free_node(Node* node) {
free(node);
}
// 打印链表
void print_list(Node* head) {
Node* p = head;
while (p != NULL) {
printf("%d ", p->value);
p = p->next;
}
printf("\n");
}
// 选择排序
void selection_sort(Node* head) {
Node* p = head;
while (p != NULL) {
Node* q = p->next;
while (q != NULL) {
if (p->value > q->value) {
int temp = p->value;
p->value = q->value;
q->value = temp;
}
q = q->next;
}
p = p->next;
}
}
int main() {
// 创建链表
Node* head = create_node(5);
head->next = create_node(3);
head->next->next = create_node(6);
head->next->next->next = create_node(1);
head->next->next->next->next = create_node(4);
// 打印原始链表
printf("Original list: ");
print_list(head);
// 选择排序
selection_sort(head);
// 打印排序后的链表
printf("Sorted list: ");
print_list(head);
// 释放链表内存
Node* p = head;
while (p != NULL) {
Node* temp = p;
p = p->next;
free_node(temp);
}
return 0;
}
```
该代码中使用了链表节点结构体和相应的创建、释放、打印链表等函数,以及选择排序函数。在选择排序函数中,使用了两个指针p和q分别表示当前节点和下一个节点,通过比较节点值的大小来交换节点位置,最终完成链表的选择排序。