如何在方案中编写我自己的排序程序,该程序接受程序并根据程序对其进行排序!
如果可以,程序是什么?
示例 - (排序'(2 4 9 5 3)>)收益率(9 5 4 3 2)
任何人都可以建议在第二个列表中搜索一个列表的每个元素的过程!
答案 0 :(得分:0)
这很简单。您只需赋予变量以保存谓词的名称并实现您喜欢的排序策略。
;; 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)
在稍微更高级的排序算法中,您不需要同时知道(< snd fst)
和(< fst scd)
,因此如果这两个都是假的,那么您有第三个选项,它们是相同的。
现在继续查找您要实施的the sorting algorithm。对于少数元素,即使专业图书馆使用Insertion sort,通常对于较大的数据集merge sort or quick sort也是不错的选择。
如果使用固定大小的向量来处理更长的列表,许多排序算法会更快。因此,大多数库实际上首先使用值创建可变向量,进行排序,然后将其转换回列表。在像DrRacket这样的Scheme实现中,您可以右键单击他们的sort
并打开定义文件以查看它是如何完成的。不用说它非常先进,以便在大多数情况下表现良好。