第一关:冒泡排序
本关任务:本关主题是利用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)
}
}