如何使用合并排序为Scala中的Int列表计算反转计数?

问题描述 投票:-2回答:1
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。

如何添加变量来获取数字?

algorithm scala sorting
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.