diff --git a/Week-01/Day-07_Merge-Sorted-Array/merge_sorted_array/Cargo.toml b/Week-01/Day-07_Merge-Sorted-Array/merge_sorted_array/Cargo.toml new file mode 100644 index 0000000..e856b33 --- /dev/null +++ b/Week-01/Day-07_Merge-Sorted-Array/merge_sorted_array/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "merge_sorted_array" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/Week-01/Day-07_Merge-Sorted-Array/merge_sorted_array/src/lib.rs b/Week-01/Day-07_Merge-Sorted-Array/merge_sorted_array/src/lib.rs new file mode 100644 index 0000000..bd905fe --- /dev/null +++ b/Week-01/Day-07_Merge-Sorted-Array/merge_sorted_array/src/lib.rs @@ -0,0 +1,21 @@ +pub fn merge(arr1: &mut [usize], arr2: &[usize]) { + let arr2_len = arr2.len(); + let arr1_len = arr1.len() - arr2_len; + + let mut arr2_iterator = 0; + let mut arr1_iterator = 0; + let temp_arr1 = arr1.to_vec(); + + for _ in 0..arr1_len + arr2_len { + if arr1_iterator == arr1_len { + arr1[arr1_iterator + arr2_iterator] = arr2[arr2_iterator]; + arr2_iterator += 1; + } else if arr2_iterator == arr2_len || temp_arr1[arr1_iterator] <= arr2[arr2_iterator] { + arr1[arr1_iterator + arr2_iterator] = temp_arr1[arr1_iterator]; + arr1_iterator += 1; + } else if arr2[arr2_iterator] < temp_arr1[arr1_iterator] { + arr1[arr1_iterator + arr2_iterator] = arr2[arr2_iterator]; + arr2_iterator += 1; + } + } +} diff --git a/Week-01/Day-07_Merge-Sorted-Array/merge_sorted_array/src/main.rs b/Week-01/Day-07_Merge-Sorted-Array/merge_sorted_array/src/main.rs new file mode 100644 index 0000000..545b21e --- /dev/null +++ b/Week-01/Day-07_Merge-Sorted-Array/merge_sorted_array/src/main.rs @@ -0,0 +1,46 @@ +use std::io::{self, Write}; + +use merge_sorted_array::merge; + +fn main() { + let mut buffer = String::new(); + + print!("Insert the first set of numbers separated by a space: "); + io::stdout().flush().expect("Failed to flush stdout."); + + io::stdin() + .read_line(&mut buffer) + .expect("Failed to read from stdin."); + + let mut nums1: Vec = buffer + .split(' ') + .map(|x| x.trim()) + .filter(|x| !x.is_empty()) + .map(|x| x.parse().expect("A non-integer has been inserted.")) + .collect(); + nums1.sort(); + + print!("Insert the second set of numbers separated by a space: "); + io::stdout().flush().expect("Failed to flush stdout."); + + buffer = String::new(); + + io::stdin() + .read_line(&mut buffer) + .expect("Failed to read from stdin."); + + let mut nums2: Vec = buffer + .split(' ') + .map(|x| x.trim()) + .filter(|x| !x.is_empty()) + .map(|x| x.parse().expect("A non-integer has been inserted.")) + .collect(); + nums2.sort(); + + nums1.resize(nums1.len() + nums2.len(), 0); + + merge(&mut nums1, &nums2); + + let merged: String = nums1.into_iter().map(|x| x.to_string() + " ").collect(); + println!("Your ordered and merged sets: {}", merged); +} diff --git a/Week-01/Day-07_Merge-Sorted-Array/merge_sorted_array/tests/example.rs b/Week-01/Day-07_Merge-Sorted-Array/merge_sorted_array/tests/example.rs new file mode 100644 index 0000000..93698d6 --- /dev/null +++ b/Week-01/Day-07_Merge-Sorted-Array/merge_sorted_array/tests/example.rs @@ -0,0 +1,9 @@ +use merge_sorted_array::merge; + +#[test] +fn example() { + let mut nums1 = [1, 2, 3, 0, 0, 0]; + let nums2 = [2, 5, 6]; + merge(&mut nums1, &nums2); + assert_eq!(nums1, [1, 2, 2, 3, 5, 6]); +}