Scala函数式编程

第1关:冒泡排序


任务描述

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

相关知识

    为了完成本关任务,你需要掌握:如何使用scala语言进行冒泡排序。

冒泡排序

    冒泡排序也称为气泡排序,是一种典型的交换排序方法。冒泡排序算法的原理如下:
1、比较相邻的元素。如果第一个比第二个大,就相互交换。
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

Scala版冒泡排序

 
  1. object BubbleSort {
  2. def main(args: Array[String]): Unit = {
  3. val sortArray=Array(49,38,65,97,76,13,27,49,78)
  4. // 循环完成一次外循环后 就会得到 一次最大值 ,最大值将不再参与排序
  5. for( j <- 0 until( sortArray.length -1)){
  6. for(i<- 0 until sortArray.length - 1 -j ){// 对每个外循环和进行多次内循环
  7. if(sortArray(i) > sortArray(i+1)){
  8. val temp = sortArray(i)
  9. sortArray(i) = sortArray(i+1)
  10. sortArray(i+1) = temp
  11. }
  12. }
  13. }
  14. sortArray.foreach(x=> print(x + " "))
  15. println()
  16. }
  17. }

输出:13 27 38 49 49 65 76 78 97

编程要求

    改进冒泡排序算法,避免序列在已经排好的情况下继续进行冒泡的操作。使得程序运行结果如预期输出。具体请参见后续测试样例。
####测试说明

平台会对你编写的代码进行测试:

测试输入:49,38,65,97,76,13,27,49,78;
预期输出:13 27 38 49 49 65 76 78 97


开始你的任务吧,祝你成功!

import  scala.util.control.Breaks._
object BubbleSort {
      def main(args: Array[String]): Unit = {
 
          val sortArray = Array(49,38,65,97,76,13,27,49,78)
          var exchange = true
         
          //**************Begin************************* 
           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
                  }     
              }
          }
          //**************End**************************
         
        sortArray.foreach(x=> print(x + " "))
    }   
}

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值