`
helian
  • 浏览: 17197 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Groovy Scala functional programming 实现冒泡排序算法

阅读更多

 

 

 

 

今日蛋疼应某人要求用functional programming实现冒泡排序,找了段erlang代码转换成了groovy

 

 

def bubbleSortP(List list) {
    if (list?.size() == 1)
        list
    else {
        def rest = []
        if (list.size() > 2)
            rest = list[2..list.size() - 1]
        if (list.get(0) > list.get(1)) {

            [list.get(1)] + bubbleSortP([list[0]] + rest)
        } else {
            [list.get(0)] + bubbleSortP([list[1]] + rest)
        }
    }

}

def bubbleSort(List list) {
    if (list?.size() == 1)
        list
    else {
        List sublist = bubbleSortP(list)
        bubbleSort(sublist[0..sublist.size() - 2]) + sublist[sublist.size() - 1]
    }

}



def tobeSort = [6, 5, 3, 1, 8, 7, 2, 4]

println bubbleSort(tobeSort)

下面是使用了inject (left fold) 的代码

def bubbleSort(List list) {
    if (list?.size() == 1)
        list
    else {
        List sublist = list.inject([]) {List previousResult, iterationValue ->
            if(previousResult.size() == 0)
                previousResult << iterationValue
            else{
                final def last = previousResult[previousResult.size() - 1]
                if(iterationValue > last)
                    previousResult + [iterationValue]
                else{
                    previousResult << last
                    previousResult.set(previousResult.size() - 2, iterationValue)
                    previousResult
                }
            }

        }
        bubbleSort(sublist[0..sublist.size() - 2]) + sublist[sublist.size() - 1]
    }

}



def tobeSort = [6, 5, 3, 1, 8, 7, 2, 4]

println bubbleSort(tobeSort)

 

最后是scala版本

 

 

object BubbleSort {


  def bubbleSort(list: List[Int]): List[Int] = {
    if (list.size == 1)
      list;
    else {
      val subList = list.foldLeft(List[Int]())((previousResult: List[Int], iterationValue: Int) => {
        if (previousResult.size == 0)
          previousResult :+ iterationValue
        else {
          val last: Int = previousResult.last
          if (iterationValue > last)
            previousResult :+ iterationValue
          else {
            previousResult.init :+ iterationValue :+ last
          }
        }
      }
      );
      val last: Int = subList.last
      bubbleSort(subList.init) :+ last;
    }
  }

  def main(args: Array[String]) {

    val tobeSort = List(6, 5, 3, 1, 8, 7, 2, 4);
    println(bubbleSort(tobeSort));

  }

}
1
1
分享到:
评论

相关推荐

    AndroidDemoIn4Languages, 在Android开发中,比较 Java Groovy Scala Kotlin.zip

    AndroidDemoIn4Languages, 在Android开发中,比较 Java Groovy Scala Kotlin 中文版 日本語 AndroidDemoIn4Languages为了了解Android开发的更好语言,用 Java 。Groovy 。Scala 和Kotlin编写了一个简单的Android应用...

    scala erlang groovy python 原理 比较 分析

    标题和描述均提到了对五种编程语言——Scala、Erlang、Groovy、Python以及它们各自的原理、比较和分析。这些语言各自拥有独特的特性和应用场景,在编程领域扮演着不同的角色。下面,我们将深入探讨每种语言的关键...

    Learning Groovy(Apress,2016)

    You’ll also learn more advanced aspects of Groovy, such as using Groovy design patterns, writing DSLs in Groovy, and taking advantage of Groovy’s functional programming features. There is more to ...

    JGSK, Java,Groovy,Scala,Kotlin 四种语言的特点对比.zip

    Java、Groovy、Scala和Kotlin是四种在Java平台上广泛使用的编程语言,它们各自具有独特的特点和优势。这里我们将深入探讨这四种语言的核心特性,并对比它们在实际开发中的应用。 首先,Java作为最古老的成员,自...

    groovy programming(2006.12).pdf

    书中探讨了如何在Groovy中定义类、创建对象、实现继承和多态性。Groovy的元编程能力也是一大亮点,它允许开发者在运行时修改类的行为,极大地提高了编程的灵活性。 #### 3. Groovy的动态性和元编程 Groovy的动态性...

    groovy programming

    groovy programming &lt;br&gt;很好很基础,坚决不简单,入门最佳 而且groovy是jvn上最好的脚本

    Programming_Groovy_2.7z

    《Programming Groovy 2》这本书是Groovy编程语言的权威指南,主要面向那些希望深入了解和使用Groovy的开发者。Groovy是一种动态、灵活的面向对象编程语言,它为Java平台带来了许多简洁和高效的特性。在Java开发环境...

    Programming Groovy 2

    ### 关于《Programming Groovy 2》的知识点详解 #### 一、Groovy语言概述 Groovy是一种基于Java平台的动态编程语言,它为开发者提供了一种简洁且强大的语法结构来构建应用程序。Groovy的设计旨在与Java代码无缝...

    Modern Programming Made Easy Using Java Scala Groovy and JavaScript 无水印pdf

    Modern Programming Made Easy Using Java Scala Groovy and JavaScript 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 ...

    Groovy Java Genetic Programming-开源

    本文将围绕“Groovy Java Genetic Programming”这一主题,深入探讨其作为开源项目的特点、功能以及实现机制,同时关注其与Jakarta Log4j库的关联。 遗传编程(Genetic Programming,GP)是一种模拟生物进化过程的...

    通过groovy自定义函数实现提取明细表字段至主表字段.rar

    本案例聚焦于使用Groovy脚本语言来实现一个特定的功能:从明细表中提取字段值,并将其更新到主表对应的字段中。这样的操作对于数据同步、报表生成以及业务流程自动化等场景非常常见。 Groovy是一种动态、灵活的Java...

    groovy脚本实现对数据库的增删改查

    在“groovy脚本实现对数据库的增删改查”这个主题中,我们将深入探讨如何使用Groovy来执行常见的数据库操作。首先,我们需要连接到数据库。在Groovy中,我们可以利用JDBC(Java Database Connectivity)API来实现这...

    The Groovy Programming Language

    4. **DSL支持**:Groovy非常适合用于构建领域特定语言(DSL),它通过简洁的语法和强大的元编程能力实现了这一点。 5. **脚本能力**:Groovy可以用作脚本语言,用于快速编写小型脚本或执行简单的任务。 #### 与Java的...

    groovy-scala-extension-module:Groovy的扩展模块,可轻松与Scala类型集成

    Groovy Scala扩展模块 该的目的是提供与Scala类型的轻松互操作性。 相依性 确保已将Bintray启用为存储库: repositories { jcenter() } 然后只需将以下构建依赖项添加到您的项目中: compile '...

    Scala、Groovy++、Stackless Python、Erlang 学习笔记及分享

    Scala是一种多范式编程语言,它融合了面向对象和函数式编程的概念,旨在提供一种高效、灵活且类型安全的编程环境。Scala运行在Java虚拟机(JVM)上,因此可以充分利用Java生态系统的丰富资源。学习Scala,你需要理解...

    groovy 一个不错的文档 实现dsl

    ### Groovy实现领域特定语言(DSL)的知识点详解 #### 标题与描述解析 - **标题**: "groovy 一个不错的文档 实现dsl" - **描述**: "groovy 一个不错的文档 实现dsl" 标题与描述均指向了一个关于如何使用Groovy语言...

    Udemy-Scala-Functional-Programming-for-Beginners-Rock-the-JVM

    **课程标题解析:** "Udemy-Scala-Functional-Programming-for-Beginners-Rock-the-JVM" 这个标题表明这是一个在Udemy平台上专为初学者设计的 Scala 语言教程,着重于函数式编程,并且强调了如何在Java虚拟机(JVM)...

    groovy-scala-demo:一个演示如何将Groovy,Gradle,Spock和Scala组合到单个项目中的演示

    #Groovy和Scala演示 使用Groovy,Gradle,Spock来测试驱动Scala解决方案。 使用Gradle作为构建系统。 Spock和Groovy进行数据驱动测试 Scala使用一些漂亮的技巧来实现该解决方案。 练习:FizzBu​​zz ###步骤...

Global site tag (gtag.js) - Google Analytics