<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://www.lensovet.net/~sysadmin/w/index.php?action=history&amp;feed=atom&amp;title=Computer_Science%2F61b%2FHomework%2Fhw8%2FListSorts.java</id>
	<title>Computer Science/61b/Homework/hw8/ListSorts.java - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://www.lensovet.net/~sysadmin/w/index.php?action=history&amp;feed=atom&amp;title=Computer_Science%2F61b%2FHomework%2Fhw8%2FListSorts.java"/>
	<link rel="alternate" type="text/html" href="http://www.lensovet.net/~sysadmin/w/index.php?title=Computer_Science/61b/Homework/hw8/ListSorts.java&amp;action=history"/>
	<updated>2026-05-03T12:30:49Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>http://www.lensovet.net/~sysadmin/w/index.php?title=Computer_Science/61b/Homework/hw8/ListSorts.java&amp;diff=24367&amp;oldid=prev</id>
		<title>Lensovet: Lensovet moved page CS/61b/Homework/hw8/ListSorts.java to Computer Science/61b/Homework/hw8/ListSorts.java</title>
		<link rel="alternate" type="text/html" href="http://www.lensovet.net/~sysadmin/w/index.php?title=Computer_Science/61b/Homework/hw8/ListSorts.java&amp;diff=24367&amp;oldid=prev"/>
		<updated>2023-02-20T03:51:35Z</updated>

		<summary type="html">&lt;p&gt;Lensovet moved page &lt;a href=&quot;/~sysadmin/w/CS/61b/Homework/hw8/ListSorts.java&quot; class=&quot;mw-redirect&quot; title=&quot;CS/61b/Homework/hw8/ListSorts.java&quot;&gt;CS/61b/Homework/hw8/ListSorts.java&lt;/a&gt; to &lt;a href=&quot;/~sysadmin/w/Computer_Science/61b/Homework/hw8/ListSorts.java&quot; title=&quot;Computer Science/61b/Homework/hw8/ListSorts.java&quot;&gt;Computer Science/61b/Homework/hw8/ListSorts.java&lt;/a&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 03:51, 20 February 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Lensovet</name></author>
		
	</entry>
	<entry>
		<id>http://www.lensovet.net/~sysadmin/w/index.php?title=Computer_Science/61b/Homework/hw8/ListSorts.java&amp;diff=4055&amp;oldid=prev</id>
		<title>Lensovet: moved CS 61b/Homework/hw8/ListSorts.java to CS/61b/Homework/hw8/ListSorts.java:&amp;#32;fix cs 61b hierarchy</title>
		<link rel="alternate" type="text/html" href="http://www.lensovet.net/~sysadmin/w/index.php?title=Computer_Science/61b/Homework/hw8/ListSorts.java&amp;diff=4055&amp;oldid=prev"/>
		<updated>2010-11-14T06:00:20Z</updated>

		<summary type="html">&lt;p&gt;moved &lt;a href=&quot;/~sysadmin/w/CS_61b/Homework/hw8/ListSorts.java&quot; class=&quot;mw-redirect&quot; title=&quot;CS 61b/Homework/hw8/ListSorts.java&quot;&gt;CS 61b/Homework/hw8/ListSorts.java&lt;/a&gt; to &lt;a href=&quot;/~sysadmin/w/CS/61b/Homework/hw8/ListSorts.java&quot; class=&quot;mw-redirect&quot; title=&quot;CS/61b/Homework/hw8/ListSorts.java&quot;&gt;CS/61b/Homework/hw8/ListSorts.java&lt;/a&gt;: fix cs 61b hierarchy&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 06:00, 14 November 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Lensovet</name></author>
		
	</entry>
	<entry>
		<id>http://www.lensovet.net/~sysadmin/w/index.php?title=Computer_Science/61b/Homework/hw8/ListSorts.java&amp;diff=3231&amp;oldid=prev</id>
		<title>Lensovet at 06:16, 22 September 2007</title>
		<link rel="alternate" type="text/html" href="http://www.lensovet.net/~sysadmin/w/index.php?title=Computer_Science/61b/Homework/hw8/ListSorts.java&amp;diff=3231&amp;oldid=prev"/>
		<updated>2007-09-22T06:16:23Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{code}}&lt;br /&gt;
 /* ListSorts.java */&lt;br /&gt;
 &lt;br /&gt;
 import list.*;&lt;br /&gt;
 &lt;br /&gt;
 public class ListSorts {&lt;br /&gt;
 	&lt;br /&gt;
 	private final static int SORTSIZE = 100000;&lt;br /&gt;
 	&lt;br /&gt;
 	/**&lt;br /&gt;
 	 *  makeQueueOfQueues() makes a queue of queues, each containing one item&lt;br /&gt;
 	 *  of q.  Upon completion of this method, q is empty.&lt;br /&gt;
 	 *  @param q is a LinkedQueue of objects.&lt;br /&gt;
 	 *  @return a LinkedQueue containing LinkedQueue objects, each of which&lt;br /&gt;
 	 *    contains one object from q.&lt;br /&gt;
 	 **/&lt;br /&gt;
 	public static LinkedQueue makeQueueOfQueues(LinkedQueue q) {&lt;br /&gt;
 		LinkedQueue returnq = new LinkedQueue();&lt;br /&gt;
 		LinkedQueue temp;&lt;br /&gt;
 		while (q.size() &amp;gt; 0) {&lt;br /&gt;
 			try {&lt;br /&gt;
 				temp = new LinkedQueue();&lt;br /&gt;
 				temp.enqueue(q.dequeue());&lt;br /&gt;
 				returnq.enqueue(temp);&lt;br /&gt;
 			} catch (QueueEmptyException e) {&lt;br /&gt;
 				System.out.println(&amp;quot;QueueEmptyException error&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		return returnq;&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	/**&lt;br /&gt;
 	 *  mergeSortedQueues() merges two sorted queues into a third.  On completion&lt;br /&gt;
 	 *  of this method, q1 and q2 are empty, and their items have been merged&lt;br /&gt;
 	 *  into the returned queue.&lt;br /&gt;
 	 *  @param q1 is LinkedQueue of Comparable objects, sorted from smallest &lt;br /&gt;
 	 *    to largest.&lt;br /&gt;
 	 *  @param q2 is LinkedQueue of Comparable objects, sorted from smallest &lt;br /&gt;
 	 *    to largest.&lt;br /&gt;
 	 *  @return a LinkedQueue containing all the Comparable objects from q1 &lt;br /&gt;
 	 *   and q2 (and nothing else), sorted from smallest to largest.&lt;br /&gt;
 	 **/&lt;br /&gt;
 	public static LinkedQueue mergeSortedQueues(LinkedQueue q1, LinkedQueue q2) {&lt;br /&gt;
 		LinkedQueue rq = new LinkedQueue();&lt;br /&gt;
 		Comparable larger = null;&lt;br /&gt;
 		LinkedQueue removal = null;&lt;br /&gt;
 		Comparable one;&lt;br /&gt;
 		Comparable two;&lt;br /&gt;
 		while (removal==null || removal.size() &amp;gt; 0) { // I like how this works&lt;br /&gt;
 			try {&lt;br /&gt;
 				if (larger == null) {&lt;br /&gt;
 				one = (Comparable) q1.dequeue();&lt;br /&gt;
 				two = (Comparable) q2.dequeue();&lt;br /&gt;
 				} else {&lt;br /&gt;
 					if (removal == q1) {&lt;br /&gt;
 						one = (Comparable) removal.dequeue();&lt;br /&gt;
 						two = larger;&lt;br /&gt;
 					} else {&lt;br /&gt;
 						one = larger;&lt;br /&gt;
 						two = (Comparable) removal.dequeue();&lt;br /&gt;
 					}&lt;br /&gt;
 				}&lt;br /&gt;
 				if (one.compareTo(two) &amp;lt;= 0) {&lt;br /&gt;
 					rq.enqueue(one);&lt;br /&gt;
 					larger = two;&lt;br /&gt;
 					removal = q1;&lt;br /&gt;
 				} else {&lt;br /&gt;
 					rq.enqueue(two);&lt;br /&gt;
 					larger = one;&lt;br /&gt;
 					removal = q2;&lt;br /&gt;
 				}&lt;br /&gt;
 			} catch (QueueEmptyException e) {&lt;br /&gt;
 				System.out.println(&amp;quot;QueueEmptyException thrown while we think there are still items on the queue...&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		if (larger !=null) {&lt;br /&gt;
 			rq.enqueue(larger);&lt;br /&gt;
 		}&lt;br /&gt;
 		while (q1.size() &amp;gt; 0) {&lt;br /&gt;
 			try {&lt;br /&gt;
 				rq.enqueue(q1.dequeue());&lt;br /&gt;
 			} catch (QueueEmptyException e) {&lt;br /&gt;
 				System.out.println(&amp;quot;We somehow managed to throw QueueEmptyException while size is &amp;gt; 0. Weird.&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		while (q2.size() &amp;gt; 0) {&lt;br /&gt;
 			try {&lt;br /&gt;
 				rq.enqueue(q2.dequeue());&lt;br /&gt;
 			} catch (QueueEmptyException e) {&lt;br /&gt;
 				System.out.println(&amp;quot;We somehow managed to throw QueueEmptyException while size is &amp;gt; 0. Weird.&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		return rq;&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	/**&lt;br /&gt;
 	 *  partition() partitions qIn using the pivot item.  On completion of&lt;br /&gt;
 	 *  this method, qIn is empty, and its items have been moved to qSmall,&lt;br /&gt;
 	 *  qEquals, and qLarge, according to their relationship to the pivot.&lt;br /&gt;
 	 *  @param qIn is a LinkedQueue of Comparable objects.&lt;br /&gt;
 	 *  @param pivot is a Comparable item used for partitioning.&lt;br /&gt;
 	 *  @param qSmall is a LinkedQueue, in which all items less than pivot&lt;br /&gt;
 	 *    will be enqueued.&lt;br /&gt;
 	 *  @param qEquals is a LinkedQueue, in which all items equal to the pivot&lt;br /&gt;
 	 *    will be enqueued.&lt;br /&gt;
 	 *  @param qLarge is a LinkedQueue, in which all items greater than pivot&lt;br /&gt;
 	 *    will be enqueued.  &lt;br /&gt;
 	 **/   &lt;br /&gt;
 	public static void partition(LinkedQueue qIn, Comparable pivot, &lt;br /&gt;
 								 LinkedQueue qSmall, LinkedQueue qEquals, &lt;br /&gt;
 								 LinkedQueue qLarge) {&lt;br /&gt;
 		while (qIn.size() &amp;gt; 0) {&lt;br /&gt;
 			try {&lt;br /&gt;
 				Comparable temp = (Comparable) qIn.dequeue();&lt;br /&gt;
 				if (temp.compareTo(pivot) &amp;lt; 0) {&lt;br /&gt;
 					qSmall.enqueue(temp);&lt;br /&gt;
 				} else if (temp.compareTo(pivot) == 0) {&lt;br /&gt;
 					qEquals.enqueue(temp);&lt;br /&gt;
 				} else {&lt;br /&gt;
 					qLarge.enqueue(temp);&lt;br /&gt;
 				} &lt;br /&gt;
 			} catch (QueueEmptyException e) {&lt;br /&gt;
 				System.out.println(&amp;quot;Managed to throw a QueueEmptyException despite having size &amp;gt; 0. What the hell.&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		if (qSmall.size() &amp;gt; 1) {&lt;br /&gt;
 			quickSort(qSmall);&lt;br /&gt;
 		}&lt;br /&gt;
 		if (qLarge.size() &amp;gt; 1) {&lt;br /&gt;
 			quickSort(qLarge);&lt;br /&gt;
 		}&lt;br /&gt;
 		qIn.append(qSmall);&lt;br /&gt;
 		qIn.append(qEquals);&lt;br /&gt;
 		qIn.append(qLarge);&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	/**&lt;br /&gt;
 	 *  mergeSort() sorts q from smallest to largest using mergesort.&lt;br /&gt;
 	 *  @param q is a LinkedQueue of Comparable objects.&lt;br /&gt;
 	 **/&lt;br /&gt;
 	public static void mergeSort(LinkedQueue q) {&lt;br /&gt;
 		LinkedQueue lqq = makeQueueOfQueues(q);&lt;br /&gt;
 		while (lqq.size() &amp;gt; 1) {&lt;br /&gt;
 			try {&lt;br /&gt;
 				lqq.enqueue(mergeSortedQueues((LinkedQueue) lqq.dequeue(), (LinkedQueue) lqq.dequeue()));&lt;br /&gt;
 			} catch (QueueEmptyException e) {&lt;br /&gt;
 				System.out.println(&amp;quot;Throwing QueueEmptyException while lqq's size &amp;gt; 1. Talk about strange.&amp;quot;);&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		try {&lt;br /&gt;
 			q.append((LinkedQueue) lqq.dequeue());&lt;br /&gt;
 		} catch (QueueEmptyException e) {&lt;br /&gt;
 			System.out.println(&amp;quot;Throwing QueueEmptyException when dequeueing the one large queue one last time. Damnit.&amp;quot;);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	/**&lt;br /&gt;
 	 *  quickSort() sorts q from smallest to largest using quicksort.&lt;br /&gt;
 	 *  @param q is a LinkedQueue of Comparable objects.&lt;br /&gt;
 	 **/&lt;br /&gt;
 	public static void quickSort(LinkedQueue q) {&lt;br /&gt;
 		if (q.size() &amp;gt; 0) {&lt;br /&gt;
 			int pivot;&lt;br /&gt;
 			pivot = (((int) (Math.random() * 10.0)) % q.size()) + 1;&lt;br /&gt;
 			Comparable piv = (Comparable) q.nth(pivot);&lt;br /&gt;
 			partition(q, piv, new LinkedQueue(), new LinkedQueue(), new LinkedQueue());&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	/**&lt;br /&gt;
 	 *  makeRandom() builds a LinkedQueue of the indicated size containing&lt;br /&gt;
 	 *  Integer items.  The items are randomly chosen between 0 and size - 1.&lt;br /&gt;
 	 *  @param size is the size of the resulting LinkedQueue.&lt;br /&gt;
 	 **/&lt;br /&gt;
 	public static LinkedQueue makeRandom(int size) {&lt;br /&gt;
 		LinkedQueue q = new LinkedQueue();&lt;br /&gt;
 		for (int i = 0; i &amp;lt; size; i++) {&lt;br /&gt;
 			q.enqueue(new Integer((int) (size * Math.random())));&lt;br /&gt;
 		}&lt;br /&gt;
 		return q;&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	/**&lt;br /&gt;
 	 *  main() performs some tests on mergesort and quicksort.  Feel free to add&lt;br /&gt;
 	 *  more tests of your own to make sure your algorithms works on boundary&lt;br /&gt;
 	 *  cases.  Your test code will not be graded.&lt;br /&gt;
 	 **/&lt;br /&gt;
 	public static void main(String [] args) {&lt;br /&gt;
 		&lt;br /&gt;
 		LinkedQueue q = makeRandom(10);&lt;br /&gt;
 		System.out.println(q.toString());&lt;br /&gt;
 		mergeSort(q);&lt;br /&gt;
 		System.out.println(q.toString());&lt;br /&gt;
 		&lt;br /&gt;
 		q = makeRandom(10);&lt;br /&gt;
 		System.out.println(q.toString());&lt;br /&gt;
 		quickSort(q);&lt;br /&gt;
 		System.out.println(q.toString());&lt;br /&gt;
 		&lt;br /&gt;
 		//Remove these comments for Part III.&lt;br /&gt;
 		Timer stopWatch = new Timer();&lt;br /&gt;
 		q = makeRandom(SORTSIZE);&lt;br /&gt;
 		stopWatch.start();&lt;br /&gt;
 		mergeSort(q);&lt;br /&gt;
 		stopWatch.stop();&lt;br /&gt;
 		System.out.println(&amp;quot;Mergesort time, &amp;quot; + SORTSIZE + &amp;quot; Integers:  &amp;quot; +&lt;br /&gt;
 						   stopWatch.elapsed() + &amp;quot; msec.&amp;quot;);&lt;br /&gt;
 		&lt;br /&gt;
 		stopWatch.reset();&lt;br /&gt;
 		q = makeRandom(SORTSIZE);&lt;br /&gt;
 		stopWatch.start();&lt;br /&gt;
 		quickSort(q);&lt;br /&gt;
 		stopWatch.stop();&lt;br /&gt;
 		System.out.println(&amp;quot;Quicksort time, &amp;quot; + SORTSIZE + &amp;quot; Integers:  &amp;quot; +&lt;br /&gt;
 						   stopWatch.elapsed() + &amp;quot; msec.&amp;quot;);&lt;br /&gt;
 	}	&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Lensovet</name></author>
		
	</entry>
</feed>