【发布时间】:2014-04-17 01:24:23
【问题描述】:
我想知道是否有一种方法可以使用 SML 的 Foldr 或 Foldl 函数编写堆排序算法。我在网上找不到一个例子,我想知道是否有人可以就这个问题给我一些指导。我想使用具有最小递归的高阶函数来实现排序算法。但是我不知道从哪里开始。
【问题讨论】:
-
这没有意义。折叠用于在迭代列表时累积值。这就是堆排序的工作方式。在 heapsort 中,您取出所有元素,将它们组成一个堆,然后从堆中一个一个地提取元素。
-
好吧,一旦你创建了堆,你就可以对堆中的数据进行排序,这就是堆排序。这是维基百科页面:en.wikipedia.org/wiki/Heapsort。所以我的问题是你将如何获取堆并将排序算法应用于该堆以对其进行排序?
-
对。但是你在这里迭代什么列表?您正在取出一个堆并反复从中取出一个元素以形成一个列表,因此它是展开。
标签: algorithm sorting functional-programming sml smlnj