【问题标题】:Quicksort in DrScheme [closed]DrScheme 中的快速排序 [关闭]
【发布时间】:2012-11-15 22:55:53
【问题描述】:
我目前正在学习 Lisp 和 DrScheme 等函数式语言,但有人要求我在 DrScheme 中编写 Quicksort 算法的变体。但是,我有点不知道从哪里开始。
有人能给我一些关于使用哪些函数和数据类型的指示吗?我显然知道列表、汽车、cdr 和追加将在做什么方面发挥重要作用。
顺便说一句,我只是在寻找开始的一般想法。我不一定想要完整的答案。有点毁了它的冒险和乐趣!
【问题讨论】:
标签:
functional-programming
lisp
scheme
racket
quicksort
【解决方案1】:
快速排序是以函数式风格实现的最简单的排序算法之一。使用此伪代码作为对数字列表进行升序排序的起点,注意您需要的唯一数据结构是标准 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:小于列表中第一个元素的元素列表,具有列表中第一个元素的单例列表(枢轴)以及大于或等于列表中第一个元素的元素列表。
在快速排序的实际实现中,在选择适当的枢轴元素时会更加小心,但对于这个简单的示例来说,就足以获取第一个元素。