Skip to content

Commit ebcaf4e

Browse files
committed
mer
1 parent 92f33be commit ebcaf4e

1 file changed

Lines changed: 42 additions & 0 deletions

File tree

examples/arrays-sort/src/main.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,45 @@ fn binary_search_first(arr: &[i32], target: i32) -> Option<usize> {
6868
}
6969
result
7070
}
71+
72+
fn merge_sort(arr: &mut [i32]) {
73+
if arr.len() <= 1 {
74+
return;
75+
}
76+
77+
let mid = arr.len() / 2;
78+
let mut left = arr[..mid].to_vec();
79+
let mut right = arr[mid..].to_vec();
80+
81+
merge_sort(&mut left);
82+
merge_sort(&mut right);
83+
84+
merge(arr, &left, &right);
85+
}
86+
87+
fn merge(arr: &mut [i32], left: &[i32], right: &[i32]) {
88+
let (mut i, mut j, mut k) = (0, 0, 0);
89+
90+
while i < left.len() && j < right.len() {
91+
if left[i] <= right[j] {
92+
arr[k] = left[i];
93+
i += 1;
94+
} else {
95+
arr[k] = right[j];
96+
j += 1;
97+
}
98+
k += 1;
99+
}
100+
101+
while i < left.len() {
102+
arr[k] = left[i];
103+
i += 1;
104+
k += 1;
105+
}
106+
107+
while j < right.len() {
108+
arr[k] = right[j];
109+
j += 1;
110+
k += 1;
111+
}
112+
}

0 commit comments

Comments
 (0)