用scheme最基本的元素定义排序函数
2013-10-28 01:50
218 查看
用到的元素有9个:
其实let 和 named let可以去掉.但那样会带来性能和可读性下降的问题.
排序类型选的是经典的快速排序.
结果:
这次的主要收获是发现应该大胆采用let来避免重复计算,例子中的lef, rig, fir, rest 就是很好的证明.
不要觉得这样会导致代码层次过多,性能才更重要.
更何况有时let也能提高可读性.
define,if,null?,cons car,cdr,lambda,let,named let,
其实let 和 named let可以去掉.但那样会带来性能和可读性下降的问题.
排序类型选的是经典的快速排序.
;筛选函数 (define (filter f x) (let recur ((x x)) (if (null? x) '() (if (f (car x)) (cons (car x) (recur (cdr x))) (recur (cdr x)))))) ;三元合并函数,形如'(1 2) , 3 , '(4 5)合并为'(1 2 3 4 5) (define (merge x y z) (let recur ((x x)) (if (null? x) (cons y z) (cons (car x) (recur (cdr x)))))) ;最原始的排序函数形式(升序) (define (sorted x) (if (null? x) '() (if (null? (cdr x)) x (merge (sorted (filter (lambda (i) (< i (car x))) (cdr x))) (car x) (sorted (filter (lambda (i) (>= i (car x))) (cdr x))))))) ;加入默认参数功能,控制升降序且高性能版本 (define (sort x . y) (let ((lef (if (null? y) < (if (= (car y) 0) < >=))) (rig (if (null? y) >= (if (= (car y) 0) >= <)))) (let recur ((x x)) (if (null? x) '() (let ((fir (car x))(rest (cdr x))) (if (null? rest) x (merge (recur (filter (lambda (i) (lef i fir)) rest)) fir (recur (filter (lambda (i) (rig i fir)) rest))))))))) (sorted '(4 3 2 1 0)) (sort '(4 3 2 1 0) 0) (sort '(4 3 2 1 0)) (sort '(5 6 7 8 9) 1) (sort '(5 6 7 8 9))
结果:
(0 1 2 3 4) (0 1 2 3 4) (0 1 2 3 4) (9 8 7 6 5) (5 6 7 8 9) >
这次的主要收获是发现应该大胆采用let来避免重复计算,例子中的lef, rig, fir, rest 就是很好的证明.
不要觉得这样会导致代码层次过多,性能才更重要.
更何况有时let也能提高可读性.
相关文章推荐
- php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
- scala 基本语句-流程控制与函数定义、异常处理
- 【php数组函数序列】之sort() - 对数组的元素值进行升序排序
- javascript--元素与数组的基本概念和常用函数
- 编写一个排序函数,实现数字排序。排序方法由客户函数实现,函数参数个数为两个,两个参数的关系作为排序后的元素间的关系。
- SQL基本操作 查询 排序 函数 ADO.net
- 基本对象Number,String,Array,Math,Date,函数的定义,全局变量
- 题目:给一个排序好的整数数组A,请写一个函数,输入是数组A和一个整数x,返回数组A中值小于x的最大元素的索引值
- Python入门教程5. 字典基本操作【定义、运算、常用函数】[原创]_python_脚本之家
- 【php数组函数序列】之arsort() - 对数组的元素值进行降序排序,保持索引关系
- 基本排序(三):插入排序 和 希尔排序- 从后向前扫描,比正操作元素大的逐步移位
- ios开发Swif语言基本的参数、函数、方法的定义和调用
- 对数组进行排序、求最大值和求元素和的算法都编写为函数模板,采用相关数据进行测试。
- 个有10个元素的整型一维数组,用户输入9个数据,调用函数,对数组元素进行从小到大排序后,在函数中输入一个数,插入到数组中正确的位置,并输出
- CGGeometry类定义几何元素的结构和操作几何元素的函数。
- 【php数组函数序列】之asort() - 对数组的元素值进行升序排序,保持索引关系
- python字典(dictionary)使用:基本函数code实例,字典的合并、排序、copy,函数中*args 和**kwargs做形参和实参
- 【php数组函数序列】之ksort()- 对数组的元素键名进行升序排序,保持索引关系
- 排序及函数对象的基本用法
- 用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数