Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fn merge_sort<T: Ord + Copy>(data: &mut [T]) {
- fn merge<T: Ord + Copy>(left: &mut [T], right: &mut [T], util: &mut [T]) {
- let left = left.iter();
- let right = right.iter();
- left.zip(right).fold(0usize, |index, (l, r)| {
- if l < r {
- util[index] = *l;
- util[index + 1] = *r;
- }
- else {
- util[index] = *r;
- util[index + 1] = *l;
- }
- index + 2
- });
- }
- fn copy<T: Ord + Copy>(data: &mut [T], util: &mut [T]) {
- }
- fn tick<T: Ord + Copy>(data: &mut [T], util: &mut [T]) {
- if data.len() < 2 {
- return
- }
- let middle = data.len() / 2;
- let (data_left, data_right) = data.split_at_mut(middle);
- let (util_left, util_right) = util.split_at_mut(middle);
- tick(data_left, util_left);
- tick(data_right, util_right);
- merge(data_left, data_right, util);
- copy(data, util);
- }
- let len = data.len();
- if len < 2 {
- return
- }
- let ref mut util: Vec<T> = Vec::with_capacity(len);
- tick(data, util.as_mut_slice());
- }
- fn main() {
- let ref mut data: [u32; 7] = [38, 27, 43, 3, 9, 82, 10];
- merge_sort(data);
- println!("{:?}", data);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement