diff options
| author | tyropro <[email protected]> | 2026-06-06 00:28:59 +0100 |
|---|---|---|
| committer | tyropro <[email protected]> | 2026-06-06 00:28:59 +0100 |
| commit | 10f01cbe090670c229d34440912758b0064b8f17 (patch) | |
| tree | 77c3034b47de81d1ad9e4bc58afea7069adcb445 | |
| parent | 4ac54b58d6879958d819d810108c0ef012cc3984 (diff) | |
| -rw-r--r-- | rng_gen.py | 9 | ||||
| -rw-r--r-- | src/main.rs | 92 |
2 files changed, 88 insertions, 13 deletions
diff --git a/rng_gen.py b/rng_gen.py new file mode 100644 index 0000000..e399be9 --- /dev/null +++ b/rng_gen.py @@ -0,0 +1,9 @@ +from random import randint + +nums = [] + +for i in range(100): + nums.append(randint(0, 2048)) + +for num in nums: + print(f"{num}, ", end="") diff --git a/src/main.rs b/src/main.rs index 8db0e1b..d7263d2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,24 +1,90 @@ +use std::thread; + fn main() { - let arr_to_sort = vec![631, 476, 134, 412, 751]; + let arr_to_sort = vec![ + 164, 1194, 660, 689, 1086, 18, 44, 61, 524, 1800, 503, 517, 1422, 1320, 1635, 1057, 1324, + 73, 673, 1206, 1258, 1085, 1856, 1373, 1293, 235, 1226, 1235, 1287, 1699, 1365, 1449, 1082, + 514, 81, 194, 1435, 982, 983, 1172, 1342, 1099, 1874, 1327, 229, 52, 1804, 1674, 1133, 165, + 1711, 1693, 1967, 518, 1091, 926, 1832, 584, 1224, 829, 1874, 1582, 1042, 1724, 863, 1261, + 1915, 512, 224, 2043, 768, 1001, 1143, 587, 1972, 260, 1177, 1027, 358, 193, 1430, 654, + 122, 891, 519, 716, 1907, 1638, 1934, 1116, 745, 762, 1572, 1130, 1889, 1965, 1428, 1187, + 1490, 274, + ]; + + // let mut lists: Vec<Vec<i32>> = Vec::new(); + + let halfway = arr_to_sort.len() / 2; + + let mut list_a: Vec<Vec<i32>> = make_lists(&arr_to_sort, 0, halfway); + let mut list_b: Vec<Vec<i32>> = make_lists(&arr_to_sort, halfway, arr_to_sort.len()); + + // while lists.len() != 1 { + // let mut index = 0; + // while index < lists.len() - 1 { + // let new_list = merge(&lists[index], &lists[index + 1]); + // lists[index] = new_list; + // lists.remove(index + 1); + // index += 1; + // } + // } + + let mut handles = Vec::new(); + + handles.push(thread::spawn(move || { + while list_a.len() != 1 { + let mut index = 0; + while index < list_a.len() - 1 { + let new_list = merge(&list_a[index], &list_a[index + 1]); + list_a[index] = new_list; + list_a.remove(index + 1); + index += 1; + } + } + list_a + })); - let mut lists: Vec<Vec<i32>> = Vec::new(); + handles.push(thread::spawn(move || { + while list_b.len() != 1 { + let mut index = 0; + while index < list_b.len() - 1 { + let new_list = merge(&list_b[index], &list_b[index + 1]); + list_b[index] = new_list; + list_b.remove(index + 1); + index += 1; + } + } + list_b + })); + + let mut results = Vec::new(); + for handle in handles { + results.push(handle.join().unwrap()); + } - for elem in arr_to_sort { - let item = vec![elem]; - lists.push(item); + if results.len() != 2 { + panic!("Oh no! A thread isn't done yet"); } - while lists.len() != 1 { - let mut index = 0; - while index < lists.len() - 1 { - let new_list = merge(&lists[index], &lists[index + 1]); - lists[index] = new_list; - lists.remove(index + 1); - index += 1; + let mut final_threads_list = Vec::new(); + for result in results { + for elem in result { + final_threads_list.push(elem); } } - println!("{:?}", lists[0]); + let final_list = merge(&final_threads_list[0], &final_threads_list[1]); + + // println!("{:?}", lists[0]); + println!("{:?}", final_list); +} + +fn make_lists(arr_to_sort: &Vec<i32>, lower_bound: usize, upper_bound: usize) -> Vec<Vec<i32>> { + let mut new_list: Vec<Vec<i32>> = Vec::new(); + for i in lower_bound..upper_bound { + let item = vec![arr_to_sort[i]]; + new_list.push(item); + } + new_list } fn merge(list_1: &Vec<i32>, list_2: &Vec<i32>) -> Vec<i32> { |
