8 votes

Un quicksort générique en Scala

Je me suis récemment amusé avec Scala et j'ai réfléchi à la manière d'y implémenter une version générique de quicksort (juste pour me familiariser avec le langage).

Je suis arrivé à quelque chose comme ça

object Main {
  def qs[T](a: List[T], f: (T, T) => Boolean): List[T] = { 
    if (a == Nil) return a
    val (l, g) = a drop 1 partition (f(a(0),(_:T)))
    qs(l, f) ::: List(a(0)) ::: qs(g, f)
  }

  def main(args: Array[String]): Unit = { 
    val a = List(5,3,2,1,7,8,9,4,6)
    val qsInt = qs(_: List[Int], (_: Int) > (_: Int))
    println(qsInt(a))
  }

}

Ce n'est pas aussi générique que je le souhaitais, car je dois indiquer explicitement comment ordonner les éléments plutôt que de faire quelque chose du genre

val (l, g) = a drop 1 partition (a(0) >)

Comment puis-je dire au compilateur que T doit seulement implémenter l'opérateur plus grand que pour être triable par cette fonction ?

Salutations

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X