【问题标题】: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:小于列表中第一个元素的元素列表,具有列表中第一个元素的单例列表(枢轴)以及大于或等于列表中第一个元素的元素列表。

在快速排序的实际实现中,在选择适当的枢轴元素时会更加小心,但对于这个简单的示例来说,就足以获取第一个元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多