DrScheme的Quicksort

时间:2012-11-15 22:55:53

标签: functional-programming lisp scheme racket quicksort

我目前正在学习像Lisp和DrScheme这样的函数式语言,但我被要求在DrScheme中编写Quicksort算法的方差。但是,我从哪里开始有点无能为力。

有人可以给我一些关于使用哪些函数和数据类型的指针?我显然知道列表,汽车,cdr和附加功能将在很大程度上发挥作用。

顺便说一句,我只是在寻找一般的想法来推出。我不一定想要完整的答案。一种废墟冒险和它的乐趣!

1 个答案:

答案 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元素时会更加小心,但是这个简单的例子足以取得第一个元素。