先贴源码(欢迎大佬指正)
object sortimp {
def main(args: Array[String]): Unit = {
val list = List[Int](5,2,21,34,11)
val xx = msort(list)
print(xx)
}
def msort[T](xs: List[T])(implicit ord: Ordering[T]): List[T] = {
def merge(xs: List[T], ys: List[T]): List[T] = (xs, ys) match {
case (Nil, _) => ys
case (_, Nil) => xs
case (x :: xs1, y :: ys1) => if (ord.lt(x, y)) x :: merge(xs1, ys) else y :: merge(xs, ys1)
}
val n: Int = xs.length / 2
if (n == 0) xs
else {
val (left, right): (List[T], List[T]) = xs.splitAt(n)
merge(msort(left)(ord), msort(right)(ord))
}
}
}
调用函数 msort 第二个参数implicit ord: Ordering[T] 为比较器,这里就不赘述了
直接上分析结果
将数据拆解到底(即单个元素)
merge(
merge(
merge(
merge({5})
,merge({2})
)
,megre({21})
),
merge(
megre({34})
,megre({11}))
)
第一步合并+排序
merge(
merge(
merge(
{5}
,{2})
,{21}
),
merge(
{34}
,{11})
)
第二步合并+排序
merge(
merge(
{2,5}
,{21}
),
{11,34}
)
第三步合并+排序
merge(
{2,5,21},
{11,34}
)
最终结果
{2,5,11,21,34}
拆解的代码: val n: Int = xs.length / 2
如有错误,欢迎留言,小弟致谢!!