Прежде всего, я хочу сказать, что это школьное задание, и я ищу только некоторые рекомендации.Использование `quick-look`, чтобы найти определенный элемент
Моя задача - написать алгоритм, который найдет k: th наименьший элемент в seq, используя quickselect. Это должно быть достаточно простым, но при выполнении некоторых тестов я ударяю стену. По какой-то причине, если я использую вход (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