C语言—单链表的冒泡排序

C语言—单链表实现冒泡排序

昨天在做学生成绩管理系统的时候,其中一个功能是要实现对学生的成绩从高到低排名,如果数据是存储在数组中的话,会很容易实现,但是这时成绩信息作为结构体成员被保存在单链表中,所以在每一轮交换排序的时候,地址不像数组那样可以简单通过下标转换而改变 所以查了资料时候掌握了单链表的冒泡排序 分享给大家。


先说说冒泡排序的中心思想:通过对无序序列的相邻元素两两比较交换,每次把最大(小)的数据放在最后,这个过程就像是冒泡一样,所以叫他冒泡排序。


在数组中冒泡排序之所以容易实现的原因在于

* 数组中数据在内存中的存储是连续的,并且通过下标的改变就可以轻松改变指针所指的地址

但在链表中,每个节点在内存中的位置是不确定的,所以不容易改变指针所指地址,来重复对链表内相邻节点的数据进行比较。


  • 所以为了解决这个问题,我们定义pFirst和pEnd两个结构体指针变量,用来表示,每一轮比较中的第一个节点和最后一个节点。我们要清楚,假设有n个数据,外层要进行n-1次循环,内层第一次比较n-1次,之后每次都少比较一次(上一次已经把最小数放在了最后)。所以pFirst和pEnd每次内循环之后都要更新。

一下是代码实现:


                
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值