高级农民
- 积分
- 4642
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-12-19
- 最后登录
- 1970-1-1
|
自己写了各个method的测试代码,供大家测试使用。
- System.out.println("/* Test makeQueueOfQueues */");
- LinkedQueue q1 = makeRandom(15);
- System.out.println("q1:" + q1.toString());
- LinkedQueue q2 = makeQueueOfQueues(q1);
- System.out.println("q1:" + q1.toString());
- System.out.println("q2:" + q2.toString());
- System.out.println("\n");
- System.out.println("/* Test mergeSortedQueues */");
- LinkedQueue q3 = new LinkedQueue();
- q3.enqueue(new Integer(0));
- q3.enqueue(new Integer(2));
- q3.enqueue(new Integer(4));
- q3.enqueue(new Integer(6));
- q3.enqueue(new Integer(8));
- LinkedQueue q4 = new LinkedQueue();
- q4.enqueue(new Integer(1));
- q4.enqueue(new Integer(3));
- q4.enqueue(new Integer(5));
- q4.enqueue(new Integer(7));
- q4.enqueue(new Integer(9));
- q4.enqueue(new Integer(11));
- q4.enqueue(new Integer(13));
- q4.enqueue(new Integer(15));
- System.out.println("q3:" + q3.toString());
- System.out.println("q4:" + q4.toString());
- LinkedQueue q5 = mergeSortedQueues(q3, q4);
- System.out.println("q3:" + q3.toString());
- System.out.println("q4:" + q4.toString());
- System.out.println("q5:" + q5.toString());
- System.out.println("\n");
- System.out.println("/* Test mergeSort */");
- LinkedQueue q = makeRandom(25);
- System.out.println("q: " + q.toString());
- mergeSort(q);
- System.out.println("q: " + q.toString());
- System.out.println("\n");
- System.out.println("/* Test partition */");
- LinkedQueue q6 = makeRandom(20);
- System.out.println("q6:" + q6.toString());
- LinkedQueue q6Small = new LinkedQueue();
- LinkedQueue q6Equals = new LinkedQueue();
- LinkedQueue q6Large = new LinkedQueue();
- int pivotNum = ThreadLocalRandom.current().nextInt(1, q6.size() + 1);
- Comparable pivot = (Comparable) q6.nth(pivotNum);
- System.out.println("pivot is: " + pivot);
- partition(q6, pivot, q6Small, q6Equals, q6Large);
- System.out.println("q6:" + q6.toString());
- System.out.println("q6Small:" + q6Small.toString());
- System.out.println("q6Equals:" + q6Equals.toString());
- System.out.println("q6Large:" + q6Large.toString());
- System.out.println("\n");
- System.out.println("/* Test quickSort */");
- q = makeRandom(100);
- System.out.println(q.toString());
- quickSort(q);
- System.out.println(q.toString());
- System.out.println("\n");
- /* Remove these comments for Part III. */
- System.out.println("/* Test Part III */");
- Timer stopWatch = new Timer();
- q = makeRandom(SORTSIZE);
- stopWatch.start();
- mergeSort(q);
- stopWatch.stop();
- System.out.println("Mergesort time, " + SORTSIZE + " Integers: " +
- stopWatch.elapsed() + " msec.");
- stopWatch.reset();
- q = makeRandom(SORTSIZE);
- stopWatch.start();
- quickSort(q);
- stopWatch.stop();
- System.out.println("Quicksort time, " + SORTSIZE + " Integers: " +
- stopWatch.elapsed() + " msec.");
- System.out.println("\n");
- System.out.println("/* Test Part IV */");
- LinkedQueue q7 = new LinkedQueue();
- Entry e1 = new Entry(new Integer(3), "spa");
- Entry e2 = new Entry(new Integer(7), "hex");
- Entry e3 = new Entry(new Integer(3), "boo");
- Entry e4 = new Entry(new Integer(7), "for");
- q7.enqueue(e1);
- q7.enqueue(e2);
- q7.enqueue(e3);
- q7.enqueue(e4);
- System.out.println("\t\t q7: " + q7);
- mergeSort(q7);
- System.out.println("After mergeSort, q7: " + q7);
- System.out.println("\n");
- LinkedQueue q8 = new LinkedQueue();
- q8.enqueue(e1);
- q8.enqueue(e2);
- q8.enqueue(e3);
- q8.enqueue(e4);
- System.out.println("\t\t q8: " + q8);
- quickSort(q8);
- System.out.println("After quickSort, q8: " + q8);
复制代码
最后的 Part IV 用到了之前作业的Entry.java。方便debug,加上了 toString() 和 compareTo()。
- /* Entry.java */
- /**
- * A class for dictionary entries.
- **/
- public class Entry implements Comparable <Entry> {
- protected Object key;
- protected Object value;
-
- public Entry (Object k, Object v) {
- key = k;
- value = v;
- }
- public Object key() {
- return key;
- }
- public Object value() {
- return value;
- }
- //Add toString for testing
- public String toString() {
- return "[" + key + ", " + value + "]";
- }
- public int compareTo(Entry e) {
- Comparable thisComp = (Comparable) key;
- Comparable eComp = (Comparable) e.key;
- if (thisComp.compareTo(eComp) < 0) {return -1;}
- else if (thisComp.compareTo(eComp) == 0) {return 0;}
- else {return 1;}
- }
- }
复制代码
Part III and Part IV
- Part III. Running time comparisons
- List size mergesort quicksort
- 100 1 ms 0 ms
- 1,000 2 ms 1 ms
- 10,000 8 ms 9 ms
- 100,000 200 ms 121 ms
- 1,000,000 2308 ms 1442 ms
- Part IV.
- Is mergesort stable?
- Why or why not?
- Yes. Because when there are two keys are equal, the key from q1 (left)
- will be enqueued, which comes from the left. In this case, the order is
- remained. However, if the key from q2 (right) will be enqueued, then the
- order cannot be remained.
- Is quicksort stable?
- Why or why not?
- Yes. Because all equal keys are preserved in qEquals queue and they are
- enqueued in the order which they have in the original queue. Therefore,
- the order are retained.
复制代码 |
-
1.jpg
(97.33 KB, 下载次数: 0)
-
2.jpg
(27.1 KB, 下载次数: 1)
 组图打开中,请稍候......
|