Skip to content

Commit a6960b1

Browse files
committed
add merge sort
1 parent 41920d0 commit a6960b1

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

code/examples/sort/src/lib.rs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
pub fn merge_sort_1(arr: &mut [i32]) {
2+
let tmp = [0i32; (arr.len() - 1)];
3+
}
4+
fn merge_core(arr: &mut [i32], tmp: &mut [i32], start: usize, end: usize) {
5+
if start >= end {
6+
return;
7+
}
8+
let mid = start + ((end - start) >> 1);
9+
merge_core(arr, tmp, start, mid);
10+
merge_core(arr, tmp, mid + 1, end);
11+
merge(arr, tmp, start, mid, end);
12+
}
13+
14+
fn merge(arr: &mut [i32], tmp: &mut [i32], start: usize, mid: usize, end: usize) {
15+
let mut i1 = start;
16+
let mut i2 = mid + 1;
17+
let mut i = 0;
18+
while i1 <= mid && i2 <= end {
19+
if arr[i1] <= arr[i2] {
20+
tmp[i] = arr[i1];
21+
i1+=1;
22+
} else {
23+
tmp[i] = arr[i2];
24+
i2+=1;
25+
}
26+
i+=1;
27+
}
28+
while i1 <= mid {
29+
tmp[i] = arr[i1];
30+
i+=1;
31+
i1+=1;
32+
}
33+
while i2 <= end {
34+
tmp[i] = arr[i2];
35+
i+=1;
36+
i2+=1;
37+
}
38+
39+
let len = i;
40+
i = 0;
41+
while i < len {
42+
arr[start + i] = tmp[i];
43+
i+=1;
44+
}
45+
}

code/examples/sort/src/main.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
use sort::merge_sort_mod;
2+
13
fn main() {
24
let mut a = [12,232,234,2,34,234,234,2,34,2,34,234,234,2,34,234,2,34,2,34,234,2,34,2];
3-
quick(&mut a);
5+
// quick(&mut a);
6+
merge_sort_mod::merge_sort_1(&mut a);
47
for item in &a {
58
println!("{}", item);
69
}

0 commit comments

Comments
 (0)