fn ternary_search(l: usize, r: usize, key: i32, arr: &[i32]) -> isize {
let mut left = l;
let mut right = r;
while left <= right {
let mid1 = left + (right - left) / 3;
let mid2 = right - (right - left) / 3;
if arr[mid1] == key {
return mid1 as isize;
}
if arr[mid2] == key {
return mid2 as isize;
}
if key < arr[mid1] {
if mid1 == 0 { break; }
right = mid1 - 1;
} else if key > arr[mid2] {
left = mid2 + 1;
} else {
left = mid1 + 1;
if mid2 == 0 { break; }
right = mid2 - 1;
}
}
-1
}
fn main() {
let arr = [1, 2, 8, 14, 15, 64, 78, 89, 99, 100, 110, 123];
let to_search = 89;
let index = ternary_search(0, arr.len() - 1, to_search, &arr);
if index != -1 {
println!("Element found at index: {}", index);
} else {
println!("Element not found.");
}
}
/*
run:
Element found at index: 7
*/