Tout d'abord, je veux dire que c'est une tâche d'école et je ne cherche que des conseils.Utiliser `quick-look` pour trouver certains éléments
Ma tâche consistait à écrire un algorithme qui trouve le k: le plus petit élément dans un seq en utilisant quickselect. Cela devrait être assez facile mais quand j'effectue des tests, je frappe un mur. Pour une raison quelconque, si j'utilise l'entrée (List(1, 1, 1, 1), 1)
, elle passe en boucle infinie.
Voici mon implémentation:
val rand = new scala.util.Random()
def find(seq: Seq[Int], k: Int): Int = {
require(0 <= k && k < seq.length)
val a: Array[Int] = seq.toArray[Int] // Can't modify the argument sequence
val pivot = rand.nextInt(a.length)
val (low, high) = a.partition(_ < a(pivot))
if (low.length == k) a(pivot)
else if (low.length < k) find(high, k - low.length)
else find(low, k)
}
Pour une raison quelconque (ou parce que je suis fatigué) Je ne peux pas repérer mon erreur. Si quelqu'un pouvait m'indiquer où je me trompe, je serais heureux.
Parcourez-le dans un débogueur. Mais un indice 'a.partition (_
ohh, bien sûr. Merci beaucoup – Duzzz