mirror of
https://github.com/theoludwig/programming-challenges.git
synced 2024-12-08 00:45:29 +01:00
feat(solutions): add sorting-algorithms/rust/merge-sort
This commit is contained in:
parent
a18d9045dd
commit
88e466cb11
@ -0,0 +1,3 @@
|
|||||||
|
# sorting-algorithms/rust/merge-sort
|
||||||
|
|
||||||
|
Created by [@Divlo](https://github.com/Divlo) on 8 March 2022.
|
@ -0,0 +1,52 @@
|
|||||||
|
use std::io::{self, BufRead};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mut numbers: Vec<i64> = Vec::new();
|
||||||
|
let stdin = io::stdin();
|
||||||
|
for line in stdin.lock().lines().skip(1) {
|
||||||
|
let line = line.unwrap();
|
||||||
|
let number: i64 = line.trim().parse().unwrap();
|
||||||
|
numbers.push(number);
|
||||||
|
}
|
||||||
|
merge_sort(&mut numbers);
|
||||||
|
for number in numbers {
|
||||||
|
println!("{}", number);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn merge_sort(array: &mut Vec<i64>) {
|
||||||
|
if array.len() > 1 {
|
||||||
|
let mid = array.len() / 2;
|
||||||
|
let mut left = array[..mid].to_vec();
|
||||||
|
let mut right = array[mid..].to_vec();
|
||||||
|
merge_sort(&mut left);
|
||||||
|
merge_sort(&mut right);
|
||||||
|
merge(left, right, array);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn merge(left: Vec<i64>, right: Vec<i64>, array: &mut Vec<i64>) {
|
||||||
|
let mut left_index = 0;
|
||||||
|
let mut right_index = 0;
|
||||||
|
let mut array_index = 0;
|
||||||
|
while left_index < left.len() && right_index < right.len() {
|
||||||
|
if left[left_index] <= right[right_index] {
|
||||||
|
array[array_index] = left[left_index];
|
||||||
|
left_index += 1;
|
||||||
|
} else {
|
||||||
|
array[array_index] = right[right_index];
|
||||||
|
right_index += 1;
|
||||||
|
}
|
||||||
|
array_index += 1;
|
||||||
|
}
|
||||||
|
while left_index < left.len() {
|
||||||
|
array[array_index] = left[left_index];
|
||||||
|
left_index += 1;
|
||||||
|
array_index += 1;
|
||||||
|
}
|
||||||
|
while right_index < right.len() {
|
||||||
|
array[array_index] = right[right_index];
|
||||||
|
right_index += 1;
|
||||||
|
array_index += 1;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user