数组的高效体现于随机访问,插排、快排等排序算法未用到这一特点,
故这两种排序算法可基于链表实现
插入排序:
迭代器 p 顺序访问链表
迭代器 i 顺序访问前 p 个元素
主要的操作为 当 p>i && p.value<i.value 删除原位置的 p 将p插入 i-1 与 i 之间
若为单向链表,保存 i-1 与 p-1
算法复杂度为比较的次数O(n^2),减少了移动数组导致的开销
快排:
迭代过程 传递各链表的首尾地址,需额外传递分割点的前驱节点
划分过程 维护小于划分点的前缀,顺序访问数组
具体算法实现过程有大量的节点删除、插入操作,并且需要及时保存节点的前驱与后继
很多自过程在Leecode中有对应的题,如划分链表等。
本文详细介绍了链表环境下,插入排序与快速排序的优化实现。通过迭代器访问链表,利用插入排序进行节点的有序插入,以及快速排序中维护前缀节点,实现了排序算法在链表上的高效运行。
388

被折叠的 条评论
为什么被折叠?



