第1关:冒泡排序
任务描述
本关任务:本关主题是利用Scala基础实现对冒泡排序算法的改进。使用冒泡算法存在这样一种情况:在第j(j<n-1)趟时就已排好序,但算法仍然执行后面几趟的比较。实际上,一旦算法中某一趟比较时没有任何元素交换,说明已经排好序了,就可以结束算法。现有9个随机数:[49,38,65,97,76,13,27,49,78]
请改进冒泡排序算法,避免序列在已经排好的情况下继续进行冒泡的操作。
相关知识
为了完成本关任务,你需要掌握:如何使用scala语言进行冒泡排序。
冒泡排序
冒泡排序也称为气泡排序,是一种典型的交换排序方法。冒泡排序算法的原理如下:
1、比较相邻的元素。如果第一个比第二个大,就相互交换。
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
Scala版冒泡排序
object BubbleSort { def main(args: Array[String]): Unit = { val sortArray=Array(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 } } } sortArray.foreach(x=> print(x + " ")) println() } }
输出: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 + " ")) } }