idastan97

CSCI152 L13 P2

Mar 9th, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.09 KB | None | 0 0
  1. //////////////////////////////////////////////////////////////// Merge Class
  2. public class MergeForDeque {
  3.     public static Deque<Integer> merge(Deque<Integer> d1, Deque<Integer> d2) {
  4.         /* assuming d1 and d2 are sorted, merge their contents
  5.        into a single sorted Deque, and return it */
  6.         int s1=d1.getSize(), s2=d2.getSize();
  7.         Deque<Integer> resD=new LinkedListDeque();
  8.         while (s1>0 || s2>0){
  9.             if (s1>0 && s2>0){
  10.                 int x, y;
  11.                 try {
  12.                     x=d1.popFromFront();
  13.                     y=d2.popFromFront();
  14.                 } catch (Exception ex){
  15.                     x=0;
  16.                     y=0;
  17.                 }
  18.                 if (x<=y){
  19.                     resD.pushToBack(x);
  20.                     s1--;
  21.                     d1.pushToBack(x);
  22.                     d2.pushToFront(y);
  23.                 } else {
  24.                     resD.pushToBack(y);
  25.                     s2--;
  26.                     d2.pushToBack(y);
  27.                     d1.pushToFront(x);
  28.                 }
  29.             } else if (s2==0){
  30.                 int x;
  31.                 try {
  32.                     x=d1.popFromFront();
  33.                 } catch (Exception ex){
  34.                     x=0;
  35.                 }
  36.                 resD.pushToBack(x);
  37.                 s1--;
  38.                 d1.pushToBack(x);
  39.             } else {
  40.                 int y;
  41.                 try {
  42.                     y=d2.popFromFront();
  43.                 } catch (Exception ex){
  44.                     y=0;
  45.                 }
  46.                 resD.pushToBack(y);
  47.                 s2--;
  48.                 d2.pushToBack(y);
  49.             }
  50.         }
  51.         return resD;
  52.     }
  53.  
  54.     public static Deque<Integer> mergeSort(Deque<Integer> deq) {
  55.         /* Step 0:  base case???
  56.         Step 1:  split deq into two Deques of relatively equal size
  57.         Step 2:  pass both of these Deques into mergeSort
  58.         Step 3:  pass the resulting Deques into merge, and return the result
  59.          */
  60.         int s=deq.getSize(), hs=deq.getSize()/2;
  61.         if (s<=1){
  62.             return deq;
  63.         }
  64.         Deque<Integer> d1=new LinkedListDeque(), d2=new LinkedListDeque();
  65.         while (s>hs){
  66.             int x;
  67.             try{
  68.                 x=deq.popFromFront();
  69.             } catch (Exception ex){
  70.                 x=0;
  71.             }
  72.             d1.pushToBack(x);
  73.             deq.pushToBack(x);
  74.             s--;
  75.         }
  76.         while (s>0){
  77.             int y;
  78.             try{
  79.                 y=deq.popFromFront();
  80.             } catch (Exception ex){
  81.                 y=0;
  82.             }
  83.             d2.pushToBack(y);
  84.             deq.pushToBack(y);
  85.             s--;
  86.         }
  87.         d1=mergeSort(d1);
  88.         d2=mergeSort(d2);
  89.         Deque<Integer> resD=merge(d1, d2);
  90.         return resD;
  91.     }
  92. }
  93.  
  94. ///////////////////////////////////////////////////////////// Test Class
  95. public class testClass {
  96.    
  97.     public static void main(String[] args){
  98.         Deque<Integer> d1=new LinkedListDeque(), d2=new LinkedListDeque();
  99.        
  100.         for (int i=1; i<=5; i++){
  101.             d1.pushToBack(i);
  102.         }
  103.         System.out.println("Size: "+d1.getSize()+"\n"+d1+"\n");
  104.        
  105.         for (int i=6; i<=11; i++){
  106.             d2.pushToBack(i);
  107.         }
  108.         System.out.println("Size: "+d2.getSize()+"\n"+d2+"\n");
  109.        
  110.         Deque<Integer> dm=MergeForDeque.merge(d1, d2);
  111.         System.out.println("Size: "+dm.getSize()+"\n"+dm+"\n");
  112.         System.out.println("Size: "+d1.getSize()+"\n"+d1+"\n");
  113.         System.out.println("Size: "+d2.getSize()+"\n"+d2+"\n");
  114.        
  115.         d1.clear();
  116.         d1.pushToBack(5);
  117.         d1.pushToBack(1);
  118.         d1.pushToBack(7);
  119.         d1.pushToBack(3);
  120.         d1.pushToBack(1);
  121.         d1.pushToBack(2);
  122.         d1.pushToBack(4);
  123.         d1.pushToBack(6);
  124.         System.out.println("Size: "+d1.getSize()+"\n"+d1+"\n");
  125.        
  126.         dm=MergeForDeque.mergeSort(d1);
  127.         System.out.println("Size: "+dm.getSize()+"\n"+dm+"\n");
  128.         System.out.println("Size: "+d1.getSize()+"\n"+d1+"\n");
  129.     }
  130. }
Advertisement
Add Comment
Please, Sign In to add comment