Scala:MutableList[Array[Double]] 的快速排序

Scala: Quicksort for a MutableList[Array[Double]]

我正在使用 MutableList[Array[Double]],其中每个数组包含五个双精度值。

现在我想实现一个快速排序,它根据数组的第 n 列对列表进行排序。我查看了 Rosetta 上的快速排序示例,并提出了这样的改编:

def quicksortDataByIndex(index: Int, list: MutableList[Array[Double]]): MutableList[Array[Double]] = {
    if(list.isEmpty){
      list
    } else {      
      val(smaller, bigger) = list partition (_(index) > list.head(index))
      quicksortDataByIndex(index, smaller) += list.head ++= quicksortDataByIndex(index, bigger)
    }
  }
}

在第 n 个元素处抛出 ArrayIndexOutOfBounds 异常。

我认为写“_(index)”是错误的,但我不知道为什么,也不知道如何以不同的方式完成。 谢谢!

这就是你想要的,我刚刚在分区之前添加了 .tail

def quicksortDataByIndex(index: Int, list: MutableList[Array[Double]]) : MutableList[Array[Double]] = {
  if(list.isEmpty){
    list
  } else {      
    val (smaller, bigger) = list.tail partition (a => a(index) < list.head(index))
    quicksortDataByIndex(index, smaller) += list.head ++= quicksortDataByIndex(index, bigger)
  }
}

输出:

quicksortDataByIndex(1, MutableList(Array(0, 3), Array(1, 2), Array(0, 7)))
// MutableList(Array(1.0, 2.0), Array(0.0, 3.0), Array(0.0, 7.0))