【问题标题】:Sort procedure in scheme方案中的排序过程
【发布时间】:2017-08-24 17:46:00
【问题描述】:

如何在方案中编写自己的 Sort 过程,该过程接受一个过程并根据该过程对其进行排序!

如果可以的话,流程是什么?

示例- (sort '(2 4 9 5 3) >) 产生 (9 5 4 3 2)

任何人都可以建议在第二个列表中搜索一个列表的每个元素的过程!

【问题讨论】:

  • 当然,使用快速排序,很容易以函数式编程风格实现。

标签: sorting search scheme procedure


【解决方案1】:

这很简单。您只需为保存谓词的变量命名并实现您喜欢的排序策略..

;; implements a 2 element sort
(define (my-sort2 lst <)
  (let ((fst (car lst)) (snd (cadr lst)))
    (if (< snd fst)
        (list snd fst)
        lst ))) ; already in correct order

(sort '(1 2) >) ; ==> (2 1)
(sort '(1 2) <) ; ==> (1 2)

在稍微高级的排序算法中,您不需要知道(&lt; snd fst)(&lt; fst scd),因此如果两者都是假的,您可以选择它们相同的第三个选项。

现在继续寻找您想要实现的the sorting algorithm。对于少数元素,即使是专业图书馆也使用Insertion sort,而对于较大的数据集,merge sort or quick sort 通常是不错的选择。

如果使用固定大小的向量来处理更长的列表,许多排序算法会更快。因此,大多数库实际上首先使用值创建一个可变向量,进行适当的排序,然后将其转换回列表。在像 DrRacket 这样的 Scheme 实现中,您可以右键单击他们的 sort 并打开定义文件以查看它是如何完成的。不用说它非常先进,以便在大多数情况下做得很好。

【讨论】:

  • @Vishal 注意使用的程序是cadr(cadr lst)(car (cdr lst)) 相同,但步骤更少。您的修改与我原来的完全相同,因此我拒绝了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 2014-03-17
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多