排序算法的深度解析与比较
1. 排序算法概述
排序是将给定列表的元素按非递减顺序排列的过程。很多排序算法可看作分治策略的应用,即将问题分解为两个约为原问题一半大小的子问题,再合并结果。相关递推关系为 (T(n) = 2T(n/2) + \Theta(n)),其解为 (T(n) = \Theta(n \log n)),这是基于比较的排序算法的渐近最优界限。
排序算法可视为两阶段过程:先构建某种树结构,再将其扁平化,即 sort = flatten · mktree 。一个好的排序算法应具备四个特性:
- 快速 :比较次数渐近最优,其他操作常数小。
- 平滑 :输入越有序,算法执行越快。
- 稳定 :相等键值的记录在输出中顺序与输入相同。
- 紧凑 :空间和运行时间使用经济。
2. 快速排序(Quicksort)
快速排序通过扁平化二叉搜索树实现。相关数据类型和函数定义如下:
data Tree a = Null | Node (Tree a) a (Tree a)
mktree::Ord a ⇒[a] →Tree a
mktree [ ] = Null
mktree (x:xs) = Node (mktree ys) x (mktree zs)
where (ys,zs) = partition (<x) xs
partition::(a →B
排序算法深度解析与比较
超级会员免费看
订阅专栏 解锁全文

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



