sorting_algorithm/
merge_sort.rs1pub fn sort<T: Ord + Clone>(data: &mut [T]) {
19 if data.len() > 1 {
20 let mid = data.len() / 2;
21
22 sort(&mut data[..mid]);
23 sort(&mut data[mid..]);
24
25 merge(data, mid);
26 }
27}
28
29fn merge<T: Ord + Clone>(data: &mut [T], mid: usize) {
30 let left = data[..mid].to_vec();
31 let right = data[mid..].to_vec();
32
33 let mut i = 0;
34 let mut j = 0;
35
36 for element in data {
37 if i < left.len() && j < right.len() {
38 if left[i] < right[j] {
39 *element = left[i].clone();
40 i += 1;
41 } else {
42 *element = right[j].clone();
43 j += 1;
44 }
45 } else if i < left.len() {
46 *element = left[i].clone();
47 i += 1;
48 } else if j < right.len() {
49 *element = right[j].clone();
50 j += 1;
51 }
52 }
53}