Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fn main() {
- let mut numbers = [10, 8, 3, 6, 1, 4, 2, 5, 9, 7];
- let length = numbers.len();
- println!("{:?}", numbers);
- merge_sort(&mut numbers, 0, length);
- }
- fn merge_sort(array: &mut [i32], from: usize, to: usize) {
- fn merge(left: &[i32], right: &[i32]) -> Vec<i32> {
- let mut merged = Vec::new();
- let (mut l, mut r) = (0, 0);
- while l < left.len() && r < right.len() {
- if left[l] <= right[r] {
- merged.push(left[l]);
- l += 1;
- } else {
- merged.push(right[r]);
- r += 1;
- }
- }
- merged.extend_from_slice(&left[l..]);
- merged.extend_from_slice(&right[r..]);
- merged
- }
- if array[from..to].len() > 1 {
- let split_idx = (to+from) / 2;
- merge_sort(array, from, split_idx);
- merge_sort(array, split_idx, to);
- let mut merged = merge(&array[from..split_idx], &array[split_idx..to]);
- array[from..to].swap_with_slice(&mut merged);
- }
- print_progress(array, from, to);
- }
- /// Print array with the region [from..to] highlighted in LaTeX format.
- fn print_progress(array: &mut [i32], from: usize, to: usize) {
- print!("[");
- for i in 0..from { print!("{}, ", array[i]); }
- print!("\\textcolor{{red}}{{");
- for i in from..to { print!("{}, ", array[i]); }
- print!("}}");
- for i in to..array.len() { print!("{}, ", array[i]); }
- println!("]");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement