`

Scala排序简写及效率

阅读更多

下面2段代码基本来自《Scala By Example》一书

 

正常的写法:(scala写的,但逻辑与实现和传统的JAVA排序一致)

 

 

def sort(xs: Array[Int]){

    def swap(i:Int, j:Int){
      val t = xs(i); xs(i) = xs(j); xs(j) = t
    }

    def sort1(l: Int, r: Int){
      val pivot = xs((l + r)/2)
      var i = l; var j = r;
      while (i <= j){
        while (xs(i) < pivot) i += 1
        while (xs(j) > pivot) j -= 1
        if(i <= j){
          swap(i, j)
          i += 1
          j -= 1
        }
      }
      if(l < j) sort1(l, j)
      if(j < r) sort1(i, r)
    }
    sort1(0, xs.length - 1)
  }

 

Scala中的漂亮写法:

 

  def quickSort(xs: Array[Int]): Array[Int]  = {
    if(xs.length <= 1) xs
    else{
      val pivot = xs(xs.length / 2)
      Array.concat(
        quickSort(xs filter (pivot >)),
             xs filter (pivot ==),
        quickSort(xs filter (pivot <))
      )
    }
  }

 

单从视觉效果上看,第二种写法绝对是精妙绝伦,排除了传统JAVA实现中的i+=1,j+=1这种缺乏直观理解的逻辑,采用filter过滤合适数据进行迭代。

 

本来我就要被书上这种漂亮的写法诱惑了,大有往后就贴近这种风格来写的冲动,但忍不住测试了下效率让我大跌眼镜:

 

采用具有16个随机数的Array测试。

当用System.currentTimeMillis()计时

 

时间1:0

时间2:17

 

第一种方法居然用毫秒都无法记录到时间?那就逼迫我们用nanoTime()来计时了:

 

时间1:11974

时间2:17514962

 

居然差了3个数量级= =

这就是漂亮代码的代价么。。。

 

大体上看来,第二种方式之所以慢应该是filter造成的,咱们可爱的filter每次都遍历集合,因此第二种方法并没有根据已排序的数据来减少后续的排序元素数量,每次都全部遍历自然效率比较低。

 

0
1
分享到:
评论

相关推荐

    Scala实操教程及演示

    Scala实操教程及演示

    Scala函数式编程

    很大篇幅都放在,使用scala实现scala默认库文件的API中,通过对简单的函数式编程逻辑的介绍和实践,主要是实践,建立起来一个比较明晰的scala思维模式,或者叫函数式编程的思维模式。 2 无副作用的函数式编程,同时...

    快学scala习题及答案详解

    快学scala习题、答案、详细解答 快学scala第一章习题答案.doc 快学scala第二章习题答案.doc 快学scala第三章习题答案.doc ......

    scala语言教程及规范

    scala 从入门到精通以及各种使用规范,使用技巧的文档

    Scala实现冒泡排序、归并排序和快速排序的示例代码

    主要介绍了Scala实现冒泡排序、归并排序和快速排序的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    基于Python Java Scala语言的MapReduce及Spark分词及词频统计效率对比

    介绍 通过使用三种不同语言编写来编写...项目分为三个模块,分别用Java,Python,Scala编写逻辑相同的分词词频统计程序,比较其编写难度及运行效率。 三个模块分别为: wordCountJava wordCountPython wordCountScala

    scala sdk scala-2.12.3

    scala-2.12.3 scala-2.12.3 scala-2.12.3 scala-2.12.3

    scala-sbt-scala编译工具

    scala 编译工具 sbt 安装包。 Little or no configuration required for simple projects Scala-based build definition that can use the full flexibility of Scala code Accurate incremental recompilation ...

    Programming In Scala 中文版及英文版

    中文版只有1-13章(已经包括基本应用了) 英文版(全)

    Scala编程实战.zip

    此文档是讲解实战Scala,希望对喜欢大数据的同学有所帮助!!! 学习Scala语言,不仅仅意味着熟悉新的API,更重要的是一种思维方式的转变。从原有的面向对象编程(OO)到函数式编程(FP)的思想。本书面向实际的使用场景...

    scala2.12.1Windows镜像包

    scala2.12.1Windows镜像包

    scala3 scala3 scala3 scala3 scala3

    scala3 scala3 scala3 scala3 scala3

    scala编程中文pdf

    scala编程 33章 中文pdf Scala编程实战 目录 第1章字符串. 11 第2章数值39 第3章控制结构.60 第4章类和属性.103 第5章方法147 第6章对象170 第7章包和导入.190 第8章特质200 第9章函数式编程214 第10 章集合242 第...

    scala五本经典资料集合

    scala是一个经典的语言,Scala代表了一个新的语言品种,它抹平了这些人为划分的界限。但是现在scala的相关学习资料不多,因此,本人总结了几篇写的较好的scala学习资料,包含&lt;ScalaQuery_Commerzbank_2011&gt;&lt;twitter-...

    scala 2.13.3 API 文档 Html离线版 scala-api.rar

    最新制作 scala 2.13.3 API 文档 Html离线版 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序。

    scala实战高清讲解

    scala编程进阶过程中不可或缺的书籍之一,详细介绍了scala语言的各种中高级语法,对于初学和高级开发人员有很大帮助

    最好的scala学习 课件

    最好的scala 学习课件,最好的scala 学习课件,学习spark必备

    eclipse插件 scala下载

    scala eclipse插件 拷贝到相应的目录即可使用,百度一大堆

Global site tag (gtag.js) - Google Analytics