Quick actions

cmd+k|ctrl+k

Navigation

Languages

5. Merge ordenado 

Snippet info

Language

Rust

Visibility

public

Author

laenergiadespuesdelano

Created

2020-10-26T19:01:52Z

Updated

2020-10-26T19:02:56Z

fn merge<T: Copy + PartialOrd>(x1: &[T], x2: &[T], y: &mut [T]) {
    assert_eq!(x1.len() + x2.len(), y.len());
    let mut a = 0;
    let mut b = 0;
    let mut c = 0;
    while a < x1.len() && b < x2.len() {
        if x1[a] < x2[b] {
            y[c] = x1[a];
            c += 1;
            a += 1;
        } else {
            y[c] = x2[b];
            c += 1;
            b += 1;
        }
    }
    if a < x1.len() {
        y[c..].copy_from_slice(&x1[a..]);
    }
    if b < x2.len() {
        y[c..].copy_from_slice(&x2[b..]);
    }
}

fn merge_ordenado<T: Copy + Ord>(x: &mut [T]) {
	let n = x.len();
	let m = n / 2;
	if n <= 1 {
		return;
	}
	merge_ordenado(&mut x[0..m]);
	merge_ordenado(&mut x[m..n]);
	let mut y: Vec<T> = x.to_vec();
	merge(&x[0..m], &x[m..n], &mut y[..]);
	x.copy_from_slice(&y);
}

fn main() {
    let mut arr = [6, 4, 2, 1, 5, 3];
    println!("{:?}", arr);
    merge_ordenado(&mut arr);
    println!("{:?}\n", arr);

}
INFO