嵌入式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;

}

为方便理解,读者可以绘制图形移动说明文本来理解算法逻辑过程

相关推荐
LaoZhangGong1232 分钟前
STM32 F103外部晶振8MHz改为12MHz,如何配置?
c语言·stm32·单片机·嵌入式硬件·晶振
独隅6 分钟前
在 Lua 中,你可以使用 `os.date()` 函数轻松地将时间戳转换为格式化的时间字符串
开发语言·lua
思麟呀1 小时前
Linux的基础IO流
linux·运维·服务器·开发语言·c++
星释1 小时前
Rust 练习册 :Pythagorean Triplet与数学算法
开发语言·算法·rust
星释1 小时前
Rust 练习册 :Nth Prime与素数算法
开发语言·算法·rust
lkbhua莱克瓦242 小时前
Java基础——集合进阶3
java·开发语言·笔记
多喝开水少熬夜2 小时前
Trie树相关算法题java实现
java·开发语言·算法
QT 小鲜肉2 小时前
【QT/C++】Qt定时器QTimer类的实现方法详解(超详细)
开发语言·数据库·c++·笔记·qt·学习
lsx2024062 小时前
MySQL WHERE 子句详解
开发语言
Tony Bai3 小时前
【Go模块构建与依赖管理】09 企业级实践:私有仓库与私有 Proxy
开发语言·后端·golang