J'essaye d'écrire une implémentation simple d'un tri de patience, en utilisant Scala.
J'ai correctement réussi à créer les piles initiales; Cependant, mon utilisation d'une file d'attente prioritaire pour simplifier la génération de liste de sortie me cause un mal de tête.Scala problème en utilisant PriorityQueue ordre par défaut pour Stack [A]
Il semble que ma mise en œuvre de commande est soit erronée ou être ignoré:
def PileOrdering = new Ordering[Stack[A]] {
def compare(a : Stack[A], b : Stack[A]) = a.head.compare(b.head)
}
// Use a priority queue, ordering on stack heads (smallest stack elems)
val pq = new PriorityQueue[Stack[A]]()(PileOrdering)
// piles is a List[Stack[A]]
pq ++= piles
// Extract an ordered list of elements
val returnVal = (0 until count) map (_ => {
val smallestList = pq.dequeue
val smallestVal = smallestList.pop
if (smallestList.length > 0){
pq.enqueue(smallestList)
}
smallestVal
})
Le PriorityQueue semble être commandé par (j'imagine la valeur par défaut Stack commande) taille de la pile, plutôt que ma commande. Y a-t-il quelque chose qui saute aux yeux comme étant manifestement erroné? Toute aide serait grandement appréciée.
Merci,
Edit: je ne pas clairement dans la question initiale: J'utilise Scala 2.8.1.
Edit2: Je m'attendais à ce que returnVal contienne un ordre d'éléments le plus petit à le plus grand, trouvé en prenant le plus petit élément de la tête de toutes les piles. Daniel a fait remarquer que mon Ordre ordonnerait mes Piles du plus grand au plus petit (les piles elles-mêmes sont déjà ordonnées correctement, avec le plus petit élément sur le dessus), ce qui semble être le problème.
Veuillez fournir le code _compilable_. Celui-ci ne compilera pas parce que 'A' et' count' sont inconnus. –
Oui, vous avez raison. Je suppose que c'est le problème de poser des questions dans les petites heures du matin. Je ne suis pas à la maison maintenant, mais je modifierai la question plus tard, quand je le serai. – owst
Veuillez indiquer clairement ce que le code de 'returnVal' est supposé faire - sinon il sera difficile de savoir si votre code est" faux "ou non. :-) –