归并排序
来源:互联网 发布:算法平台 编辑:程序博客网 时间:2024/05/22 12:47
#lang scheme
( define ( list-len lst )
( cond
[ ( null? lst ) 0 ]
[ else ( + 1 ( list-len ( cdr lst ) ) ) ] ) )
( define ( left-branch lst len )
( cond
[ ( = len 0 ) '() ]
[ else
( cons ( car lst )
( left-branch ( cdr lst )
( - len 1 ) ) ) ] ) )
( define ( right-branch lst len )
( cond
[ ( = ( list-len lst ) len ) lst ]
[ else
( right-branch ( cdr lst ) len ) ] ) )
( define ( merge lst1 lst2 )
( cond
[ ( null? lst1 ) lst2 ]
[ ( null? lst2 ) lst1 ]
[ ( < ( car lst1 )( car lst2 ) )
( cons ( car lst1 )
( merge ( cdr lst1 ) lst2 ) ) ]
[ else
( cons ( car lst2 )
( merge lst1 ( cdr lst2 ) ) ) ] ) )
( define ( merge-sort lst )
( cond
[ ( null? ( cdr lst ) ) lst ]
[ else
( let* ( [ len ( list-len lst ) ]
[ pivot ( floor ( / len 2 ) ) ] )
( merge ( merge-sort ( left-branch lst pivot ) )
( merge-sort ( right-branch lst ( - len pivot ) ) ) ) ) ] ) )
( define lst '( 11 21 3 4 8 33 5 1 12 111 12 0 99 19 ) )
( merge-sort lst )
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- Android pm命令使用方法
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- 寻找和为定值的多个数
- Spring事务管理—aop:pointcut expression解析
- [从零开始学设计模式-java]工厂方法模式(Factory Method)
- 归并排序
- 背景图延迟加载(lazyload)技术
- linux下配置ip地址四种方法(图文)
- lowdb 学习
- 【bzoj 2749】: [HAOI2012]外星人
- 删除oracle用户、表空间、及物理文件操作过程
- jsoup初探
- 【CSS】|
- 双系统修复Ubuntu 12.04 GRUB引导