需求
对一个单链表进行升序排序,尽量节省内存,提高速度。
思路
不遍历列表获取链表长度,防止列表长度过长影响速度;
不移动每个结点中数据域的内容,防止因为数据量大影响速度;
尽量少创建节点变量,省内存;
解决方案
算法:
使用冒泡排序算法进行排序;
冒泡排序原理,动图演示:
(动图转自网络,如有侵权请通知,我会第一时间删除)
循环分析:
内循环:
假设链表头结点为Head, Head节点内数据域无有效数据,地址域中保存了A的地址;
第一个含有有效数据的结点为A,往后按照 B C D……排序
内循环每次都从排序在第一的有效结点开始比较;
第一次应当比较A和B,如果A大于B互换位置,那么Head的地址域就应该指向了B,B的地址域指向A,A的地址域指向C
此时,前两个结点已经完成了比较,并且将较大的一个放在了第二位,那么就要比较这个较大的和第三个结点的大小