/ / Scala: Quicksort dla MutableList [Array [Double]] - tablice, lista, scala, quicksort

Scala: Quicksort dla MutableList [Array [Double]] - tablice, lista, scala, quicksort

Używam a MutableList[Array[Double]], z których każda tablica zawiera pięć podwójnych.

Teraz chcę zaimplementować quicksort, który sortuje listę zgodnie z jej n-tą kolumną Array. Zajrzałem do przykładu szybkiego sortowania w Rosetta i zaproponowałem tę adaptację:

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)
}
}
}

Który zgłasza wyjątek ArrayIndexOutOfBounds w n-tym elemencie.

Zakładam, że pisanie „_ (index)” jest błędne, ale nie wiem dlaczego i jak można to zrobić inaczej. Dzięki!

Odpowiedzi:

0 dla odpowiedzi № 1

To, co chcesz, właśnie dodałem .tail przed partycjonowaniem.

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)
}
}

Wyjście:

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))