Advertisement
Guest User

Untitled

a guest
Feb 13th, 2016
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.47 KB | None | 0 0
  1. import java.util.*;
  2. import java.io.*;
  3.  
  4. public class QueueSort<E extends Comparable<E>, except> {
  5.  
  6.     private ArrayQueue<ArrayQueue<E>> Q;
  7.     public static final int CAPACITY = 10; // default queue capacity
  8.     private int n;
  9.     private boolean trace;
  10.  
  11.     public QueueSort() {
  12.         this(CAPACITY);
  13.     }
  14.  
  15.     public QueueSort(int capacity) {
  16.         n = capacity;
  17.         Q = new ArrayQueue<ArrayQueue<E>>(n);
  18.     }
  19.  
  20.     private ArrayQueue<E> merge(ArrayQueue<E> q1, ArrayQueue<E> q2) throws ArrayQueueException {
  21.        
  22.         ArrayQueue<E> q3 = new ArrayQueue<E>( q1.size()+q2.size() );
  23.        
  24.         while ( q1.isEmpty() && q2.isEmpty() ) {
  25.             //E q1Element = q1.dequeue();
  26.             //E q2Element = q2.dequeue();
  27.            
  28.             if ( q1.front().compareTo(q2.front()) > 0) {
  29.                 q3.enqueue(q2.dequeue());
  30.             } else {
  31.                 q3.enqueue(q1.dequeue());
  32.             }
  33.            
  34.             if ( q1.front().compareTo(q2.front()) == 0) {
  35.                 q3.enqueue(q2.dequeue());
  36.                 q3.enqueue(q1.dequeue());
  37.             }
  38.        
  39.         }
  40.        
  41.         while ( q1.size()>0 ) {
  42.             q3.enqueue(q1.dequeue());
  43.             q3.enqueue(q2.dequeue());
  44.         }
  45.        
  46.         return q3;
  47.     }
  48.     //
  49.     // IMPLEMENT ME
  50.     // Take two sorted queues and merge them to produce a third
  51.     // sorted queue
  52.     //
  53.  
  54.     public void sort() {
  55.         ArrayQueue<E> Q1 = new ArrayQueue<E>(1);
  56.         ArrayQueue<E> Q2 = new ArrayQueue<E>(1);
  57.        
  58.         while (Q.size() > 1) {
  59.             Q1 = Q.dequeue();
  60.             Q2 = Q.dequeue();
  61.             Q.enqueue( merge(Q1,Q2) );
  62.         }
  63.        
  64.     }
  65.     //
  66.     // IMPLEMENT ME
  67.     // given a queue Q of queues
  68.     // (1) if Q is of size 1 deliver the first queue in Q
  69.     // (2) if Q is of size 2 or more
  70.     // - get the first and second queues off Q
  71.     // - merge these two queues to create a third queue
  72.     // - add the third queue to the queue
  73.     // - go back to (1)
  74.     //
  75.  
  76.     public void add(E element) {
  77.         ArrayQueue<E> tempQ = new ArrayQueue<E>(1);
  78.         tempQ.enqueue(element);
  79.         Q.enqueue(tempQ);
  80.     }
  81.     //
  82.     // IMPLEMENT ME
  83.     // create an ArrayQueue<E> that contains the element
  84.     // enqueue it onto Q
  85.     //
  86.  
  87.     public String toString() {
  88.         return Q.toString();
  89.     }
  90.  
  91.     public void trace() {
  92.         trace = !trace;
  93.     }
  94.  
  95.     public static void main(String[] args) throws IOException {
  96.     Scanner sc = new Scanner(new File(args[0])); //takes each word
  97.     ArrayList<String> data = new ArrayList<String>();
  98.     while (sc.hasNext()) data.add(sc.next()); //while file not empty, add each word to data (array)
  99.     int n = data.size();
  100.     QueueSort<String> QS = new QueueSort<String>(n);
  101.     for (String s : data) QS.add(s);
  102.     if (args.length > 1) QS.trace();
  103.     QS.sort();
  104.     System.out.println(QS);
  105.     }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement