澄清一个递归排序算法

3
我有一个Haskell作业问题,细节有点复杂。我想澄清一下在这个问题中我要做什么:
定义函数 select ,它接受一个整数列表并返回其头部是最小元素,尾部是从列表中删除最小元素后递归排序获得的列表。
这是不是意味着"列表的第一个元素是最小的,而最后一个元素是比最小值大但比其他所有元素都小的整数"?
例如,如果我有这个列表:
[ 2, 3, 4, 6, 8, 7]

如果答案应该是

[2, 4, 6, 8, 7, 3]

或者
[2, 4, 6, 7, 8, 3]

?


1
只是想知道,哪些学校或大学会布置Haskell的作业? - BenjaminB
阿尔伯塔大学在它的第三年函数式编程课程中教授 Haskell 和 Scheme。 - Jean-Bernard Pellerin
4个回答

2
你想要的是:给定列表[5 3 9 8 1],您希望以下内容:
  • 一个列表,其中头部最小(1),尾部是对其余列表[5 3 9 8]进行排序的结果。
  • 原始列表的尾部具有最小头部(3),尾部是对[5 9 8]进行排序的结果
  • 以此类推。

所以最后就像Iarsmans下面说的那样,变成了[1, 3, 5, 8, 9],对吧? - steven
是的,但任务要求使用递归以特定方式获取[1, 3, 5, 8, 9]。 - Kevin Lacquement

2
这意味着你应该获得排序后的列表[2, 3, 4, 6, 7, 8]。期望的答案不是列表,而是实现方法。问题告诉你实现方法应该如何工作,即通过提取最小元素,然后调用自身对其余部分进行排序,最后将它们粘合在一起。

1
“列表的头是列表中最小元素的列表”,这很容易理解。而其尾部则是通过递归排序从列表中删除最小元素后得到的列表。因此,结果应该是排序好的:[2, 3, 4, 6, 7, 8]。(您的教授希望您实现选择排序。)

0
似乎问题要求你按升序对数组进行排序(例如,sort([5,4,3]) ==> [3,4,5])。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接