How to implement ternary search to find a value in a sorted list with Rust

1 Answer

0 votes
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

*/

 



answered Jan 12 by avibootz

Related questions

...