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))
我正在使用 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))