我如何编写我自己的排序程序在程序中接受程序并根据程序进行排序!方案中的排序程序
如果可以,程序是什么?
例如 - (排序“(2 4 9 5 3)>)的产率(9 5 4 3 2)
而且任何人都可以提供一个程序,用于在第二列表中搜索一个列表的每个元素!
我如何编写我自己的排序程序在程序中接受程序并根据程序进行排序!方案中的排序程序
如果可以,程序是什么?
例如 - (排序“(2 4 9 5 3)>)的产率(9 5 4 3 2)
而且任何人都可以提供一个程序,用于在第二列表中搜索一个列表的每个元素!
这很简单。你只需要给变量来保存谓词的名称和实现你喜欢的那种策略..
;; 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
并打开定义文件以查看它是如何完成的。毋庸置疑,为了在大多数情况下表现良好,其相当先进。
当然,使用快速排序,它很容易在函数式编程风格中实现。 –