嵌入式C语言之链表冒泡排序
链表冒泡排序一是可以交换指针域的值,二是可以交换指针
typedef struct st_node{
int score;
struce st_node *next;
}Node,*LinkList;
LinkList createList(){
Node *head = (Node *)malloc(sizeof(Node));
if(NULL == head){
printf("内存分配失败!"):
return NULL;
}
head->next = NULL;
return head;
}
void sortLinklist(Linklist linklist){
// 默认当前这个链表有头节点
// 要接着排序的链表
Linklist sorted = linklist->next;
// 将原来那个链表变为空表,用来存放排序后的链表
linklist->next = NULL;
while(sorted != NULL){
Node *curr = sorted;
// 每次去排序curr就重新初始化这个prev和temp
Node *prev = linklist;
Node *temp = linklist->next;
while(temp != NULL && temp->score < curr->score){
// 原先的linklist实际是排序好的列表,一直循环到排序列表中temp的数据刚好就是插入数据的前一个
prev = temp;
temp = temp->next;
}
// 插入的新节点curr,后续指向linklist后续的节点
curr->next = temp;
prev->next = curr;
// 下次再找下一个需要排序的节点
sorted = sorted->next;
}
return;
}
为方便理解,读者可以绘制图形移动说明文本来理解算法逻辑过程