scala函数式编程 educoder

第一关:冒泡排序

本关任务:本关主题是利用Scala基础实现对冒泡排序算法的改进。使用冒泡算法存在这样一种情况:在第j(j<n-1)趟时就已排好序,但算法仍然执行后面几趟的比较。实际上,一旦算法中某一趟比较时没有任何元素交换,说明已经排好序了,就可以结束算法。现有9个随机数:[49,38,65,97,76,13,27,49,78]

    请改进冒泡排序算法,避免序列在已经排好的情况下继续进行冒泡的操作。

for( j <- 0 until( sortArray.length -1)){    
              for(i<- 0 until sortArray.length - 1 -j ){// 对每个外循环和进行多次内循环  
                  if(sortArray(i) > sortArray(i+1)){  
                       val temp = sortArray(i)  
                       sortArray(i) = sortArray(i+1)  
                       sortArray(i+1) = temp  
                  }       
              }  

第二关:函数排序

本关任务:本关主题是利用Scala函数式编程中已经实现的排序函数实现相关的排序需求。在一次考试中,Cathy、Daniel和Andy的成绩如下:

object TestSort{
  def main(args:Array[String]){
    val pairs = Array(
      ("Cathy",  100,  110,  108,  78,  95,  89),
      ("Daniel",  110,  98,  110,  80, 94,     88),
      ("Andy",   105,  120,  115, 85,     90,     95) )
    //**************Begin*************************
    //构造新数组(姓名,三科总分,六科总分)
    val  count = Array(
      (pairs{0}._1,pairs{0}._2+pairs{0}._3+pairs{0}._4,
        pairs{0}._2+pairs{0}._3+pairs{0}._4+pairs{0}._5+pairs{0}._6+pairs{0}._7),
      (pairs{1}._1,pairs{1}._2+pairs{1}._3+pairs{1}._4,
        pairs{1}._2+pairs{1}._3+pairs{1}._4+pairs{1}._5+pairs{1}._6+pairs{1}._7),
      (pairs{2}._1,pairs{2}._2+pairs{2}._3+pairs{2}._4,
        pairs{2}._2+pairs{2}._3+pairs{2}._4+pairs{2}._5+pairs{2}._6+pairs{2}._7) )
    //排序
    val b= count.sortWith{
      case (a,b)=>{
        if(a._3==b._3) {//如果总分相等,就按三科降序
          if(a._2==b._2)
            a._1<b._1
          else
            a._2>b._2
        }else {
          a._3>b._3 //否则总分降序
        }
      }
    }
    //**************End**************************
    //打印结果
    b.map(println)
  }
}

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
函数式编程(FP)是一种软件开发风格,它注重不依赖于编程状态的函数。函数式代码易于测试和复用,容易实现并发,且不容易受到bug的攻击。Scala一种能很好支持函数式编程的新兴JVM语言。《Scala函数式编程》是针对希望学习FP并将它应用于日常编码中的程序员而写的,内容包括:函数式编程的概念;函数式编程的各种“为什么”和“怎么做”;如何编写多核程序;练习和检测。 从OOP到FP,思路的转化 我是使用scala做完一个项目之后,开始阅读本书。 介绍下背景: 1 程序员 2 前C程序员,linux平台,没有很深的java背景 3 用scala做过一个2年期的项目 在使用scala的过程中,碰到的问题主要体现在: 1 scala的很多语法糖不理解,不知道为啥要这么写,有种为了这么写的简洁而这么写的感觉 2 scala很多库在设计的时候,不理解原因,包括Option,Collection的很多看似有冗余的地方 3 很多scala的默认写法,不理解 4 多态的具体化,尤其是协变的意义所在 5 各种重载的符号使用 之前读过 programming in scala,对语言的整体还停留在: 1 scala用起来比java更灵活 2 强大的collection,可以更加方便的处理collection类的数据 3 不同于java的并行处理方法,有点像c的逻辑思路 4 开发成本比java小,但是语言学习成本比java高很多 正在阅读这本书的过程中,只能一点一点说。 第一部分快要读完了,习题也快要做完了。 1 第一部分主要着墨点正是回答我上述问题的1,2,3的。很大篇幅都放在,使用scala实现scala默认库文件的API中,通过对简单的函数式编程逻辑的介绍和实践,主要是实践,建立起来一个比较明晰的scala思维模式,或者叫函数式编程的思维模式。 2 无副作用的函数式编程,同时也解释了为什么在scala中,val和var的区分为什么那么重要。 3 在做习题的过程中,尤其是在做类型推导的过程中,对原来oop,命令式编程向函数式编程转变有很大作用;而且简洁的语法,确实让人有享受编程的感觉。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值