Skip to content

Instantly share code, notes, and snippets.

@xiabingquan
Created February 10, 2025 15:50
Show Gist options
  • Save xiabingquan/07109481b9e4361832e7494c95cbb990 to your computer and use it in GitHub Desktop.
Save xiabingquan/07109481b9e4361832e7494c95cbb990 to your computer and use it in GitHub Desktop.
A minmal example of merge sort in Rust
use rand::Rng;
fn merge_sort<T: Ord + Clone + Copy>(arr: &mut [T]) {
let len = arr.len();
if len < 2 {
return;
}
let mid = len / 2;
merge_sort(&mut arr[0..mid]);
merge_sort(&mut arr[mid..]);
let mut temp = arr.to_vec();
let (left, right) = temp.split_at_mut(mid); // mutable borrow
let (mut i, mut j, mut k) = (0, 0, 0);
while i < left.len() && j < right.len() {
if left[i] <= right[j] {
arr[k] = left[i].clone();
i += 1;
} else {
arr[k] = right[j].clone();
j += 1;
}
k += 1;
}
while i < left.len() {
arr[k] = left[i].clone();
i += 1;
k += 1;
}
while j < right.len() {
arr[k] = right[j].clone();
j += 1;
k += 1;
}
}
fn main() {
let mut rng = rand::thread_rng();
let n: u32 = rng.gen_range(10..100);
let mut arr = vec![0; n as usize];
for i in 0..arr.len() {
arr[i] = rng.gen_range(0..100);
}
println!("Before sorting: {:?}", arr);
merge_sort(&mut arr);
println!("After sorting: {:?}", arr)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment