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 let mut k = 0;
36
37 while i < left.len() && j < right.len() {
38 if left[i] < right[j] {
39 data[k] = left[i].clone();
40 i += 1
41 } else {
42 data[k] = right[j].clone();
43 j += 1
44 }
45
46 k += 1;
47 }
48
49 while i < left.len() {
50 data[k] = left[i].clone();
51 i += 1;
52 k += 1;
53 }
54
55 while j < right.len() {
56 data[k] = right[j].clone();
57 j += 1;
58 k += 1;
59 }
60}