fn linear_search(arr: &[i32], target: i32) -> Option<usize> {
for (i, &val) in arr.iter().enumerate() {
if val == target {
return Some(i); // found target
}
}
None // target not found
}
fn binary_search(arr: &[i32], target: i32) -> Option<usize> {
if arr.is_empty() {
return None;
}
let mut left = 0;
let mut right = arr.len() - 1;
while left <= right {
let mid = left + (right - left) / 2;
if arr[mid] == target {
return Some(mid); // found target
} else if arr[mid] < target {
left = mid + 1; // search right half
} else {
if mid == 0 { break; } // prevent underflow
right = mid - 1; // search left half
}
}
None // target not found
}
fn main() {
let arr = [1, 3, 5, 7, 9, 11, 13, 15];
let target = 9;
if let Some(index) = linear_search(&arr, target) {
println!("Linear Search: Found {} at index {}", target, index);
} else {
println!("Linear Search: {} not found", target);
}
if let Some(index) = binary_search(&arr, target) {
println!("Binary Search: Found {} at index {}", target, index);
} else {
println!("Binary Search: {} not found", target);
}
}for (i, &val) in arr.iter().enumerate() {
iterate over array elements one by one for linear search
check if current element matches target
let mut left = 0;
let mut right = arr.len() - 1;
initialize left and right pointers for binary search
loop while search space is valid
let mid = left + (right - left) / 2;
find middle index to split search space
check if middle element is target
else if arr[mid] < target { left = mid + 1; }
if target is greater, move left pointer to right half
else { if mid == 0 { break; } right = mid - 1; }
if target is smaller, move right pointer to left half, prevent underflow
Linear Search: Found 9 at index 4
Binary Search: Found 9 at index 4