Skip to content

Instantly share code, notes, and snippets.

@huytd
Created January 9, 2021 08:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save huytd/138599e3fdd60361049f42c694e5b045 to your computer and use it in GitHub Desktop.
Save huytd/138599e3fdd60361049f42c694e5b045 to your computer and use it in GitHub Desktop.
Rust implementation of Merge Sort algorithm from CLRS book
fn merge(a: &mut Vec<i32>, p: usize, q: usize, r: usize) {
let al = [&a[p..=q], &[i32::MAX]].concat();
let ar = [&a[q+1..=r], &[i32::MAX]].concat();
let mut i = 0;
let mut j = 0;
for k in p..=r {
if al[i] <= ar[j] {
a[k] = al[i];
i += 1;
} else {
a[k] = ar[j];
j += 1;
}
}
}
fn merge_sort(a: &mut Vec<i32>, p: usize, r: usize) {
if p < r {
let q = (p + r) / 2;
merge_sort(a, p, q);
merge_sort(a, q + 1, r);
merge(a, p, q, r);
}
}
fn main() {
let mut n = vec![1,5,8,9,2,4,7,9];
let len = n.len();
merge_sort(&mut n, 0, len-1);
println!("{:?}", n);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment