我目前正在学习像Lisp和DrScheme这样的函数式语言,但我被要求在DrScheme中编写Quicksort算法的方差。但是,我从哪里开始有点无能为力。
有人可以给我一些关于使用哪些函数和数据类型的指针?我显然知道列表,汽车,cdr和附加功能将在很大程度上发挥作用。
顺便说一句,我只是在寻找一般的想法来推出。我不一定想要完整的答案。一种废墟冒险和它的乐趣!
答案 0 :(得分:0)
Quicksort是以功能样式实现的最简单的排序算法之一。使用此伪代码作为起始点,按升序排序数字列表,注意到您需要的唯一数据结构是标准Lisp列表:
quicksort(lst)
if lst is empty
return empty list
return quicksort([all the elements < first element in lst])
+ [first element in lst] +
quicksort([all the elements >= first element in lst])
“棘手”部分,使所有元素小于(或所有元素大于或等于)列表中的第一个元素,可以用filter
过程轻松表达。如果您不被允许使用它,那么从头开始实现其基本功能就很容易了。
另请注意,我的伪代码中的+
运算符表示三个列表中的append
:小于列表中第一个元素的元素列表,列表中第一个元素的单个列表(枢轴)和大于或等于列表中第一个元素的元素列表。
在Quicksort的实际实现中,在选择合适的pivot元素时会更加小心,但是这个简单的例子足以取得第一个元素。