Scala数组归并排序
来源:互联网 发布:t lab软件下载 编辑:程序博客网 时间:2024/06/10 02:13
1.简介
几天不看算法就都忘了,正好学习scala,来复习下算法顺便。
归并排序,思想是分而治之,然后合并得出结果。
分为两个阶段:
1.拆分(这里以拆分为两个部分为示例)
将一个数据集合分为A,B两个部分,分别对A,B排序,
而对A,B排序的方法,同样是将之分为两个部分然后排序。如此会得到一个结果就是最终,A和B这两个部分是有序的;
比如10,4,6,3,8,2,5,7变为3,4,6,10和2,5,7,8两个部分。
2.合并
在得到A,B两个有序的数据集后,因为A和B都是有序的,可以通过将A集合中元素用折半查找然后插入B集合的复制数据集的方式来得到一个合并后的集合。
2.示意图
·
3.代码
object MergeSort { def msort[T](less:(T,T)=>Boolean)(xs:List[T]):List[T]={ //xs.foreach { x => print(x+" "); } //println("____"); def merge(xs:List[T],ys:List[T]):List[T]={ /* xs.foreach { x => print(x+" ");} print(" and ") ys.foreach { x => print(x+" "); } println();*/ (xs,ys) match{ case (Nil,_)=>ys; case (_,Nil)=>xs; case (x::xs1,y::ys1) => {//这里的merge方法是合并作用,但是合并之前通过模式匹配的::符号对数据进行的拆分 if(less(x,y)) x::merge(xs1,ys) else y::merge(xs,ys1) }; } } val n=xs.length/2; if(n==0) xs; else { val (ys,zs) =xs.splitAt(n); merge(msort(less)(ys),msort(less)(zs)); } } def main(args: Array[String]): Unit = { val k=msort((a:Int,b:Int)=>a<b)(List(10,4,6,3,8,2,5,7)); k.foreach { x => print(x+" "); } }}
0 0
- Scala数组归并排序
- scala实现归并排序
- Scala归并排序解析
- 归并排序,scala实现
- Scala练习-归并排序
- scala 排序算法 归并排序
- Scala插入排序、归并排序、快速排序
- 数组归并排序
- 数组的归并排序
- 数组归并排序
- 归并排序(数组)
- 数组的归并排序
- 数组的归并排序
- 数组归并排序
- 【scala 数据结构和算法】Scala实现:归并排序
- Scala实现冒泡排序、归并排序和快速排序
- Scala实现冒泡排序、归并排序和快速排序
- 字符数组归并排序操作
- lucene初探(二):中文分词,以及系统自带分词简单比较
- eclipse4.3里修改项目在tomcat中的上下文访问路径和部署路径
- git shell 命令集合
- Lucene笔记(1)
- redis
- Scala数组归并排序
- 真机测试遇到0xE8008016错误修改方法
- 机器学习入门:线性回归及梯度下降
- linux命令行发送带附件的邮件
- 自己看书的清单
- 配置Xshell的 鼠标选中即复制,右键即粘贴的功能!
- smarty中定义变量
- 字符编码的故事
- AVPlayer