まず、これは学校の割り当てであり、私はいくつかのガイダンスのみを求めています。クイックルックを使用して特定の要素を見つける
私の仕事は、quickselectを使ってse:にk番目の最小要素を見つけるアルゴリズムを書くことでした。これは十分に簡単なはずですが、いくつかのテストを実行するときに壁に当たった。何らかの理由で、私が入力(List(1, 1, 1, 1), 1)
を使用すると、無限ループに入ります。ここで
は私の実装です:何らかの理由
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)
}
(または私は疲れているので)、私は私のミスを見つけることができません。誰かが私が間違っているところを私に示唆することができたら、私は喜ぶだろう。
デバッガでウォークスルーします。しかし、すべての要素が同じ場合のヒント 'a.partition(_
ohh。どうもありがとうございます – Duzzz