F#排序问题

标签 f# functional-programming

这段代码有什么问题吗?为什么不排序?

let rec sort = function
  | []         -> []
  | [x]        -> [x]
  | x1::x2::xs -> if x1 <= x2 then x1 :: sort (x2::xs)
                              else x2 :: sort (x1::xs)

支持采取 排序 [3;1;4;1;5;9;2;6;5];;

并返回: val it : int 列表 = [1; 1; 2; 3; 4; 5; 5; 6; 9]

最佳答案

你的代码就像 bubble sort 中的一个气泡循环。它将把最大元素带到最后一个位置,并将其他一些更大的元素放在右边。

请注意,您仅遍历原始列表一次。它具有线性复杂度,我们都知道仅使用比较进行排序必须是 O(n*log n)。

如果您想对此列表进行排序,可以多次重复该循环。

关于F#排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32890086/

相关文章:

f# - 使用模式匹配和递归F#在列表中查找Maximum元素

R:我可以使用Reduce(或其他高级函数)执行以下操作吗?

scala - 无法使用 andThen 内联部分应用的函数

visual-studio-2005 - 在 Visual Studio 2005 中设置 F#

Haskell:QuickCheck 属性无法使用含义进行测试

functional-programming - AutoLISP:如何解决无函数定义错误?

.net - .Net/F# 中的千位分隔符

silverlight - 在 Silverlight 中即时调整 ChildWindow 高度会导致奇怪的行为

functional-programming - F# 查询表达式与 native SQL 具有相同的性能吗?

f# - 在 F# 中的模块级别创建私有(private)静态字段