Advertisement
sergkh

Untitled

Dec 23rd, 2019
587
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 4.87 KB | None | 0 0
  1. use rand::{thread_rng, Rng};
  2. use std::num::ParseIntError;
  3. use std::convert::TryInto;
  4.  
  5. #[derive(Debug, Clone, Copy)]
  6. struct intsort {
  7.     integer: i32,
  8.     sorted: i32,
  9. }
  10.  
  11.  
  12. //impl Copy for intsort {
  13.  
  14. //}
  15. //impl Clone for intsort {
  16. //    fn clone(&self) -> Self {*self}
  17. //}
  18.  
  19. fn sorted(arr: &[intsort]) -> bool {
  20.     for i in arr {
  21.         if i.sorted != 1 {
  22.             return false;
  23.         }
  24.     }
  25.     true
  26. }
  27.  
  28.  
  29.  
  30. fn sort2slice(arr: &mut  &mut [intsort] )
  31. {
  32.     // let mut arr = &arr1;
  33. let arrsize = arr.len();
  34. // let randomelements = arr[thread_rng().gen_range(0, arrsize-1 )];
  35. match arrsize {
  36.     1 => { arr[0].sorted=1}
  37.     ,
  38.     2=>  {
  39. println!("arr[o] {:?}, arr[1] {:?}", arr[0], arr[1]);
  40.     if arr[0].integer< arr[1].integer {
  41.     arr[0].sorted=1;  arr[1].sorted=1; }
  42.    
  43.       else {arr.swap(0,1);
  44.       arr[0].sorted=1;
  45.       arr[1].sorted=1;       
  46.      
  47.       }
  48.  
  49.     }      
  50.  
  51.     _ => {println!("{:?}", "size above2");
  52.       let randomelements = arr[thread_rng().gen_range(0, arrsize-1)].clone()
  53.       ;
  54.       println!("randomelements: {:?}", randomelements.integer);
  55.      
  56. //    let mut  i:usize=0;
  57.       let mut  j:usize =arrsize.clone();
  58.       let mut leftpartcount =0;
  59.       println!("arrsize {:?}", j);
  60.       j=j-1;
  61.      //  let mut arr2 = Vec::with_capacity(j);
  62.       'outer: for i in 0..arrsize-1
  63.       {
  64.           println!("I: {:?}", i+1);
  65.           if i ==j {println!("i==j {:?} j: {:?}", i, j );
  66. leftpartcount=leftpartcount+1;
  67.               ;break; }
  68.           if arr[i].integer <= randomelements.integer { println!("element smaller then  random. doing nothing {:?}< {:?}", arr[i].integer,randomelements.integer);
  69.                                 leftpartcount= leftpartcount + 1;
  70.                                 println!("leftpart:{:?}", leftpartcount);
  71.                                continue; }
  72.           else
  73.           {
  74.           println!("try to  swap elements  : I:{:?}   arr[i]: {:?}", i, arr[i].integer );
  75.          
  76.           while arr[j].integer>= randomelements.integer {
  77.               //j=j-1;
  78.              
  79.                                 println!("arr[j]:{:?} j: {:?} arr[i]: {:?} i: {:?}", arr[j].integer, j , arr[i].integer, i);
  80.               if   j<=i  {println!("break");
  81.                  j=arrsize-1;
  82.                  break 'outer ;}
  83.               j=j-1;
  84.               println!("arr[j]= {:?}", arr[j].integer);
  85.           }
  86.          
  87.           println!("trying to swap elements arr[i]: {:?} arr[j]: {:?}", arr[i], arr[j]);
  88.           arr.swap(i,j);
  89.           println!("swapping  result {:?} {:?}  i; {:?}", arr[i].integer, arr[j].integer, i);
  90.               arr[i].sorted=0;
  91.           arr[j].sorted=0;
  92.           j=arrsize-1;
  93.         //  leftpartcount= leftpartcount + 1;
  94.          
  95.           }
  96.          
  97.       }
  98.       println!("final J: {:?} arrsize : {:?} leftpartcount {:?}", j, arrsize, leftpartcount
  99.       );
  100.     //  if j==arrsize-1 {arr[0].sorted= (arrsize-1).try_into().unwrap();} else {
  101.      
  102.       if (arrsize-leftpartcount>1) {
  103.           println!("set rightpart");
  104.           arr[leftpartcount].sorted=(arrsize-leftpartcount).try_into().unwrap();
  105.           arr[0].sorted=(leftpartcount).try_into().unwrap();
  106.           if leftpartcount ==0 {arr[0].sorted=arrsize.try_into().unwrap();}  
  107.       }
  108.       else {
  109. arr[0].sorted=(leftpartcount+1).try_into().unwrap();
  110.       };
  111.     //}
  112.     println!("==========================");
  113.  
  114.     for k in 0..arrsize {
  115. println!("K : {:?}  value : {:?}" , k , arr[k]);
  116.  
  117.     }
  118.  
  119. }
  120. }}
  121.  
  122. fn main() {
  123.     println!("Hello, world!");
  124.     let mut myarray = Vec::new();
  125.     myarray.extend(
  126.         [
  127.             5, 7, 8, 9, 23, 1, 134, 245, 11, 356, 521, 12, 2, 4, 6, 87, 45, 25, 34, 999,
  128.         ]
  129.         .iter()
  130.         .cloned(),
  131.     );
  132.     let mut arr2: Vec<i32> = Vec::new();
  133.     arr2.extend([5, 7, 8, 9, 12, 3432, 32, 4].iter().cloned());
  134.     //println!("{:?}", quicksort(myarray).unwrap());
  135.     let mut arrint: Vec<intsort> = Vec::new();
  136.     arrint.push(intsort {
  137.         integer: 10,
  138.         sorted: 0,
  139.     });
  140.     arrint.push(intsort {
  141.         integer: 5,
  142.         sorted: 0,
  143.     });
  144.     arrint.push(intsort {
  145.         integer: 7,
  146.         sorted: 0,
  147.     });
  148. arrint.push(intsort {
  149.     integer: 1,
  150.     sorted: 0, //
  151. });
  152.     arrint.push(intsort {
  153.     integer:150,
  154.     sorted: 0,
  155.    });    
  156.  
  157.  arrint.push(intsort {
  158.     integer:11,
  159.     sorted: 0,
  160.    });    
  161.      arrint.push(intsort {
  162.     integer:22,
  163.     sorted: 0,
  164.    });    
  165.      arrint.push(intsort {
  166.     integer:143,
  167.     sorted: 0,
  168.    });    
  169.    
  170.    
  171.     println!("{:?}", sorted(&arrint));
  172.     sort2slice(&mut arrint.get_mut(..).unwrap());
  173.      let arrsize = arrint.len();
  174.     while !sorted(&arrint) {
  175.     for i in 0..arrint.len()-1 {
  176.         if arrint[i].sorted==0 {continue}
  177.         if arrint[i].sorted!=1 {
  178.         let slicesize = arrint[i].sorted.clone();
  179.             println!("slicesize: {:?}", slicesize);
  180.         sort2slice(&mut  arrint.get_mut(i..(i+slicesize as usize)).unwrap());
  181.  
  182.         }
  183.  
  184.     }
  185.  
  186.     for j  in &arrint {println!("integer : {:?} sorted: {:?}", j.integer, j.sorted)};
  187.     println!("++++++++++++++++++++++++++++++++++++");
  188.     }
  189. //    sort2slice(&mut arrint);
  190.     for i in arrint {
  191.     println!("int:{:?} sorted: {:?}", i.integer, i.sorted);
  192.     }
  193.    
  194. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement