OCaml在实施排序时是否使用mutable
或immutable
数据结构?
对于许多排序算法,我们需要在列表或数组中的位置之间交换数据。
我只是想知道,如果OCaml总是打算使用immutable data structures
,那么每个交换操作都会创建一个新副本吗?
这会影响performance
吗?
答案 0 :(得分:2)
对于许多排序算法,我们需要在列表或数组中的位置之间交换数据。
不一定。
我只是想知道,如果OCaml总是打算使用不可变数据结构
不,OCaml具有可变和不可变的数据结构。但是,通常首选使用不可变数据结构。
那么每个交换操作都会创建一个新副本吗?
这取决于所讨论的数据结构。但是,在处理不可变数据结构时,通常你不想用交换单个元素来表达你的排序算法(正如我上面指出的那样,你当然不需要)。
例如, List.sort
适用于不可变数据结构(列表),效率非常高。它使用合并排序算法(在OCaml的当前实现中)。