如何使用合并排序为Scala中的Int列表计算反转计数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用合并排序为Scala中的Int列表计算反转计数?相关的知识,希望对你有一定的参考价值。
def mergeSort(xs: List[Int]): List[Int] = {
val n = xs.length / 2
if (n == 0) xs
else {
def merge(xs: List[Int], ys: List[Int]): List[Int] =
(xs, ys) match {
case(Nil, ys) => ys
case(xs, Nil) => xs
case(x :: xs1, y :: ys1) =>
if (x < y) {
x :: merge(xs1, ys)
}
else {
y :: merge(xs, ys1)
}
}
val (left, right) = xs splitAt(n)
merge(mergeSort(left), mergeSort(right))
}
}
数组的反转计数表示 - 数组的排序距离(或接近)。如果数组已经排序,则反转计数为0.如果数组按相反顺序排序,则反转计数最大。从形式上讲,如果[i]> a [j]和i <j,则两个元素a [i]和a [j]形成反转
示例:序列2,4,1,3,5具有三个反转(2,1),(4,1),(4,3)。
因此,如果将此列表(2,4,1,3,5)传递给函数,则反转计数应为3。
如何添加变量来获取数字?
以上是关于如何使用合并排序为Scala中的Int列表计算反转计数?的主要内容,如果未能解决你的问题,请参考以下文章