まず第一に、これは学校の課題であり、指導を求めているだけです。
私の仕事は、quickselect を使用して、seq 内の 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)
}
なんらかの理由で (または疲れているため)、間違いを見つけることができません。誰かが私がどこで間違っているかを教えてくれたら、私は喜んでいます.