真的越来越喜欢Scala了,简洁的语法,清新的风格是我对Scala的印象,感觉使用Scala进行编程真的非常的方便,从Scala的设计思想也能得到不少的启发,就比如下面的一个对数字数组快速排序的sort(Array[Int])方法,你以前想到过通过这样的方式实现吗?
/**
* 快速排序的例子2
* @author VWPOLO
* <p>2009-8-12</p>
*/
object TestQuickSort2 {
def main(args : Array[String]) : Unit = {
var arrays = Array(123,343,5435,23,3213);
println("排序前的结果");
arrays.foreach(println)
arrays = sort(arrays);
println("排序后的结果");
arrays.foreach(println)
}
def sort(xs: Array[Int]):Array[Int] = {
if(xs.length <= 1)
xs;
else {
val pivot = xs(xs.length /2);
Array.concat(
sort(xs filter (pivot >)),
xs filter (pivot ==),
sort(xs filter (pivot <))
)
}
}
}
sort(Array[Int])方法通过简明的方式完成了传统的快速排序功能:
1、判断参数数组是否为空?如果为空说明排序完成,直接方法参数。
2、如果给定的参数数字不为空,取得数组的中间数。
3、根据中间数对参数数组进行拆分:调用Array的filter(p: A => Boolean)方法对数组进行分区并生成一个新的数组,"xs filter (pivot >)" 生成一个新的数组只包含小于pivot的数字,"xs filter (pivot ==)"里面的数组只包含等于pivot的数组,"xs filter (pivot <)"则包含大于pivot的数字,通过sort方法的迭代,完成了排序过程。
4、通过Array.concat方法合并多个数组,返回排序后的结果就行了。<!--endfragment-->
sort方法指定了返回值但是方法块中没有"return" 语言,其实加不加都无所谓,Scala编译器可以自动进行判断。
<!--endfragment-->
这种方式和传统的快速排序方法在时间复杂度和空间复杂度相似,但是代码却大大的简化了,不信你用Java写一个对数字数组快速的排序方法(要自己写,使用Collections.sort(List<T>)方法可不算啊)。
Scala引起了大家的大量关注,一些人拿Scala的缺点和Java的优点进行比较进行批评Scala,"另一些人拿Java缺点和Scala优点进行比较来拥护Scala,然后两队人在论坛上打起了口水仗,因为Scala又不是钞票,当然不能够取悦所有人。
分享到:
相关推荐
主要介绍了Scala实现冒泡排序、归并排序和快速排序的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
快速排序 泡泡排序 合并排序 选择排序 ## Type类 Scala具有支持临时多态性的“类型类”。 我不确定此功能与支持函数式编程的Scala是否相关,但是看起来它是一种使用非常广泛的功能。 这是一个使用上下文边界的类型类...
快速排序 7 20 10 合并排序 5 27 4 编译java部分 javac Main.java 编译scala部分 scalac Main.scala quicksort/Sort.scala mergesort/Sort.scala bubblesort/Sort.scala 回购的主要分支具有主要功能,该功能运行各种
快速排序 基数排序 选择排序 壳排序 视频 在线裁判 动态规划 视频 在线裁判 贪婪的 在线裁判 位操作 在线裁判 递归 在线裁判 回溯 在线裁判 数据结构 大批 在线裁判 矩阵 哈希表 在线裁判 堆 视频 在线裁判 队列 ...
算法 我正在学习最重要的语法,同时又在脑海中修复算法 ... 快速排序: 去做 排序 选择排序 合并排序 斗类 插入排序 计数排序 内省型 堆排序 数学的 欧几里得算法 霍纳法 因式分解 平方根 文本 字谜 回文 未完待续...
ML算法: 线性回归逻辑回归朴素贝叶斯知识网络K...等排序算法: 快速排序气泡排序合并排序插入排序...等数据结构和算法: Queue列二叉树链表跳过清单BFS,DFS ....等DSP和多媒体技术: 快速傅立叶变换小波哈夫曼...等
Gradle-4.10.1 版本的Gradle具有一个改进的增量Java编译器,现在默认...4. Gradle 4.10相关任务的相关性之间的排序不正确; 5. tasks . with type(Scala compile::class . Java)。configureEach在多项目生成中失败。
排序分配2 使用快速排序技术对列表进行排序运行重定向到----->无突变排序----->然后:sbt运行
Akka分布式快速排序演示 该应用程序以quicksort为例,演示如何使用akka解决分布式递归问题。 使用工作队列方法的类位于com.tsykul.forkjoin.distributed.queue包中。 要运行工作程序,请启动...
快速排序 Sort Colors Kth Largest Element in an Array 桶排序 First Missing Positive 计数排序 H-Index 基数排序 Maximum Gap 其他 Largest Number 小结 查找 Search for a Range Search Insert Position Search ...
Smile(统计机器智能和学习引擎)是一个快速而全面的机器学习系统。 凭借先进的数据结构和算法,Smile可提供最先进的性能。 Smile涵盖了机器学习的方方面面,包括分类,回归,聚类,关联规则挖掘,特征选择,流形...
Smile(统计机器智能和学习引擎)是一个快速而全面的机器学习系统。 凭借先进的数据结构和算法,Smile可提供最先进的性能。 Smile涵盖了机器学习的方方面面,包括分类,回归,聚类,关联规则挖掘,特征选择,流形...
算法排序气泡排序鸡尾酒排序梳子排序侏儒排序堆排序插入排序合并排序快速分类选择排序贝壳类搜寻中深度优先搜索广度优先搜索IDDFS A *搜索Prim的算法克鲁斯卡尔算法怎么跑安装并在algovis目录中键入以下命令。...
RDD提供了⽐MapReduce 丰富的模型,可以快速在内存中对数据集进⾏多次迭代,来⽀持复杂的数据挖掘算法和图形计算算法 4. Spark 多个作业之间数据通信是基于内存,效率更⾼ 缺点: 1. Spark 是基于内存的,由于内存...
它优化的操作包括:超大规模邻接矩阵查询,快速读写和可分页查询。FlockDB将图存储为一个边的集合,每条边用两个代表顶点的64位整数表示。对于一个社会化网络图,这些顶点ID即用户ID,但是对于“收藏”推文这 样的边...
业余时,作为一个编程语言爱好者,对D、Kotlin、Lua、Clojure、Scala、Julia、Go等语言均有了解,但至今仍为Python独特的风格、简洁的设计而惊叹。 目录 · · · · · · 第1章 程序之道 1 1.1 什么是程序 1 ...
玛格达 Magda是一个数据目录系统,将提供一个单一的位置,可以在这里对组织的所有数据进行分类,丰富,搜索,跟踪和优先排序-无论大小,可以是内部或外部来源,都可以作为文件,数据库或API来使用。 Magda专门针对...