fun ternarySearch(l: Int, r: Int, key: Int, arr: List<Int>): Int {
var left = l
var right = r
while (left <= right) {
val mid1 = left + (right - left) / 3
val mid2 = right - (right - left) / 3
when {
arr[mid1] == key -> return mid1
arr[mid2] == key -> return mid2
key < arr[mid1] -> right = mid1 - 1
key > arr[mid2] -> left = mid2 + 1
else -> {
left = mid1 + 1
right = mid2 - 1
}
}
}
return -1 // not found
}
fun main() {
val arr = listOf(1, 2, 8, 14, 15, 64, 78, 89, 99, 100, 110, 123)
val toSearch = 89
val index = ternarySearch(0, arr.size - 1, toSearch, arr)
if (index != -1) {
println("Element found at index: $index")
} else {
println("Element not found.")
}
}
/*
run:
Element found at index: 7
*/