1pub fn inplace_merge_by<T: Copy>(a: &mut [T], k: usize, cmp: fn(&T, &T) -> bool) {
5 let fst = a[0..k].to_vec();
6 let snd = a[k..].to_vec();
7
8 let mut i = 0;
9 let mut j = 0;
10 let mut k = 0;
11
12 loop {
13 if i >= fst.len() {
14 if j >= snd.len() {
15 break;
16 } else {
17 a[k] = snd[j];
18 j += 1;
19 }
20 } else if j >= snd.len() || cmp(&fst[i], &snd[j]) {
21 a[k] = fst[i];
22 i += 1;
23 } else {
24 a[k] = snd[j];
25 j += 1;
26 }
27 k += 1;
28 }
29}
30
31pub fn inplace_merge<T: Ord + Copy>(a: &mut [T], k: usize) {
33 inplace_merge_by(a, k, |x, y| x < y);
34}
35
36pub fn merge<T: Ord + Copy>(mut a: Vec<T>, mut b: Vec<T>) -> Vec<T> {
38 let n = a.len();
39 a.append(&mut b);
40 inplace_merge(&mut a, n);
41 a
42}