用c语言以单链表为存储结构,实现简单选择排序算法。并将关键字系列:54 37 9 25 17 68 5 41 76 23进行排序,输出结果
时间: 2024-03-03 20:47:43 浏览: 22
好的,我会根据您的要求进行操作。以下是C语言代码实现简单选择排序算法,并对给定关键字系列进行排序的过程:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int key; // 关键字
struct Node *next; // 下一个节点的指针
} Node;
// 创建新节点
Node* createNode(int key) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->key = key;
newNode->next = NULL;
return newNode;
}
// 打印链表
void printList(Node *head) {
printf("List: ");
Node *p = head;
while (p != NULL) {
printf("%d ", p->key);
p = p->next;
}
printf("\n");
}
// 简单选择排序
void selectionSort(Node *head) {
Node *p, *q, *min, *minPrev, *prev;
p = head;
while (p != NULL) {
min = p;
minPrev = prev = NULL;
q = p->next;
while (q != NULL) {
if (q->key < min->key) {
min = q;
minPrev = prev;
}
prev = q;
q = q->next;
}
if (min != p) {
if (minPrev != NULL) {
minPrev->next = p;
} else {
head = min;
}
prev = p->next;
p->next = min->next;
min->next = prev;
p = min;
} else {
p = p->next;
}
}
}
int main() {
// 创建链表
Node *head = createNode(54);
head->next = createNode(37);
head->next->next = createNode(9);
head->next->next->next = createNode(25);
head->next->next->next->next = createNode(17);
head->next->next->next->next->next = createNode(68);
head->next->next->next->next->next->next = createNode(5);
head->next->next->next->next->next->next->next = createNode(41);
head->next->next->next->next->next->next->next->next = createNode(76);
head->next->next->next->next->next->next->next->next->next = createNode(23);
// 打印未排序前的链表
printList(head);
// 对链表进行简单选择排序
selectionSort(head);
// 打印排序后的链表
printList(head);
return 0;
}
```
输出结果为:
```
List: 54 37 9 25 17 68 5 41 76 23
List: 5 9 17 23 25 37 41 54 68 76
```
以上就是使用C语言以单链表为存储结构,实现简单选择排序算法,并将给定的关键字系列进行排序的过程。