Skip to content

Commit 7568f4c

Browse files
committed
add merge sort tpl code
1 parent b0fb81e commit 7568f4c

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

SORT/ms.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
fn main() {
2+
let mut a = vec![4,4,3,2,1];
3+
ms(&mut a);
4+
println!("{:?}",a);
5+
}
6+
7+
fn ms(arr: &mut Vec<i32>) {
8+
if arr.len() == 0 || arr.len() == 1 {
9+
return
10+
}
11+
12+
let mid = arr.len()/2;
13+
let (l,r ) = arr.split_at_mut(mid);
14+
let (mut l, mut r) = (l.to_vec(), r.to_vec());
15+
16+
ms(&mut l);
17+
ms(&mut r);
18+
19+
let (mut x,mut y, mut merged) = (0,0, vec![]);
20+
while x < l.len() && y < r.len() {
21+
if *l.get(x).unwrap() < *r.get(y).unwrap() {
22+
merged.push(*l.get(x).unwrap());
23+
x += 1;
24+
} else {
25+
merged.push(*r.get(y).unwrap());
26+
y+=1;
27+
}
28+
}
29+
while x < l.len() {
30+
merged.push(*l.get(x).unwrap());
31+
x += 1;
32+
}
33+
while y < r.len() {
34+
merged.push(*r.get(y).unwrap());
35+
y+=1;
36+
}
37+
38+
std::mem::replace(arr, merged);
39+
}

0 commit comments

Comments
 (0)