【发布时间】:2011-10-03 23:51:26
【问题描述】:
我正在学习haskell,看到的函数定义是:
quickSort (x : xs) = (quickSort less) ++ (x : equal) ++ (quickSort more)
where less = filter (< x) xs
equal = filter (== x) xs
more = filter (> x) xs
是否可以只遍历列表一次,而不是 3 次?
【问题讨论】:
-
Quicksort 的平均复杂度为
O(n lg n)... -
复杂性与比较次数有关,上述版本的比较次数将是通过遍历一次来划分列表的版本的 3 倍。
-
@newacct,它不仅仅是遍历列表;它在遍历时比较每个元素;这就是为什么。
-
@ivanm,是的,复杂度是一样的,平均为 O(n log n)。但它是 O(n^2),最坏的情况。然而,不管这个事实如何,这个问题都是合理的,算法的实现通常是通过常数因子的大小来衡量的。
-
@ivanm,O(n) 表示法是一种衡量复杂性的方法。这并不意味着复杂性是相同的。假设我以英里为单位测量距离,以便于我。这并不意味着我去隔壁和附近的购物中心需要同样的时间。
标签: sorting haskell quicksort difference-lists