Data.List提供用于排序列表的排序功能.它不使用quicksort; 相反,它使用称为mergesort的算法的有效实现.
Haskell使用mergesort而不是quicksort的根本原因是什么?Quicksort通常具有更好的实际性能,但在这种情况下可能不是.我认为快速排序的现场好处很难(不可能?)与Haskell列表有关.
关于softwareengineering.SE有一个相关的问题,但实际上并不是为什么使用 mergesort.
我自己实现了两种类型的分析.Mergesort是优越的(大约是2 ^ 20个元素列表的两倍),但我不确定我的quicksort实现是否最佳.
编辑:这是我的mergesort和quicksort的实现:
mergesort :: Ord a => [a] -> [a]
mergesort [] = []
mergesort [x] = [x]
mergesort l = merge (mergesort left) (mergesort right)
where size = div (length l) 2
(left, right) = splitAt size l
merge :: Ord a => [a] -> [a] -> [a]
merge ls [] = ls
merge [] vs = vs
merge first@(l:ls) …Run Code Online (Sandbox Code Playgroud) 在 matplotlib 图中,如何在鼠标移动时连续读取鼠标的坐标,而不等待点击?这在matlab中是可能的,并且有一个mpld3 插件几乎可以完全满足我的要求,但我不知道如何实际访问它的坐标。还有包mpldatacursor,但这似乎需要点击。搜索“matplotlib鼠标坐标无需点击”之类的内容没有得到答案。
使用 mpld3 等附加包的答案很好,但似乎纯 matplotlib 解决方案应该是可能的。