fn find_median_unsorted_matrix(matrix: Vec<Vec<i32>>) -> f64 {
let mut elements: Vec<i32> = Vec::new();
// Flatten the matrix
for row in matrix.iter() {
for val in row.iter() {
elements.push(*val);
}
}
// Sort the elements
elements.sort();
// Calculate median
let n = elements.len();
if n % 2 == 1 {
// Odd number of elements: return middle element
elements[n / 2] as f64
} else {
// Even number of elements: return average of two middle elements
(elements[n / 2 - 1] + elements[n / 2]) as f64 / 2.0
}
}
fn main() {
let matrix = vec![
vec![5, 8, 9, 10],
vec![1, 4, 6, 13],
vec![7, 3, 0, 18],
vec![6, 8, 9, 20],
];
let median = find_median_unsorted_matrix(matrix);
println!("Median of the matrix is: {:.1}", median);
}
/*
run:
Median of the matrix is: 7.5
*/