Quick actions

cmd+k|ctrl+k

Navigation

Languages

Merge

Snippet info

Language

Rust

Visibility

public

Author

alexis-enrique-martine-maganda

Created

2020-10-21T00:05:24Z

Updated

2020-10-21T00:08:33Z

fn merge<T: Copy + PartialOrd>(x1: &[T], x2: &[T], y: &mut [T]) {
    assert_eq!(x1.len() + x2.len(), y.len());
    let mut i = 0;
    let mut j = 0;
    let mut k = 0;
    while i < x1.len() && j < x2.len() {
        if x1[i] < x2[j] {
            y[k] = x1[i];
            k += 1;
            i += 1;
        } else {
            y[k] = x2[j];
            k += 1;
            j += 1;
        }
    }
    if i < x1.len() {
        y[k..].copy_from_slice(&x1[i..]);
    }
    if j < x2.len() {
        y[k..].copy_from_slice(&x2[j..]);
    }
}
fn merge_sort<T: Copy + Ord>(x: &mut [T]) {
	let n = x.len();
	let m = n / 2;
	if n <= 1 {
		return;
	}
	merge_sort(&mut x[0..m]);
	merge_sort(&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() {
    println!("Merge Sort");
    let mut numbers = [-1,2,100,5,-9,6,5,8,10,12];
    merge_sort(&mut numbers);
    println!("Resultado:  {:?}\n", numbers);
}
INFO