CS 241 Data Structures- Lab 4, Due 2/23 (!)

Sort Timing

Your task for this lab is to implement the three O(n^2) sorts: bubble sort, insertion sort, and selection sort; then time them on various sized lists, namely 1000, 2000, 4000, 8000, etc (by passing them to a SortTimer) to verify they are actually O(n^2).

Approach

A few random sort variations have been presented in class; use them as a model for the three sorts you must implement. Copy/paste (most of) this code into your Frame and write classes to make it code work (use NetBeans to create the Frame, then copy this piecemeal):
public class TimerFrame extends javax.swing.JFrame {

    public TimerFrame() {  // this constructor creates the form and displays it
        initComponents();
        setSize(1000, 500);
        setTitle("SortTimer Frame");
        setVisible(true);

        emit("\t\t\tT I M I N G   T H R E E   S O R T S !\n\n");
        emit(header());
        timeStuff();
        emit("\n\nAll done!");
    }
    
    /** time each of the sorts for length n
     * done by n instead of by sort so the output is easy
     */
    private void timeStuff() {
        for (int i = 0; i < 7; i++) {
            int n = (int) Math.pow(2, i);
            time(n * 1000);  
            emit("\n");
        }
    }

   private void time(int n) {
        // create an array with an instance of each sort of length n 
        AbstractSort[] sorts = {new BubbleSort(n), new InsertSort(n), new SelectionSort(n)};

        emit("n=" + n);

        for (int i = 0; i < sorts.length; i++) { // for each of the sorts
            AbstractSort aSort = sorts[i];
            spewIfSmall("before", aSort, n);
            long time = SortTimer.time(aSort);
            emit(" t=" + time);
            spewIfSmall("after", aSort, n);
        }
    }

    void emit(String s) {
        theTA.append(s + "\t");
    }
To produce output that looks something like:
            T I M I N G   T H R E E   S O R T S !
        	bubble	insert	 select		
	n=1000	 t=19	 t=8	 t=8	
	n=2000	 t=25	 t=1	 t=4	
	n=4000	 t=33	 t=6	 t=16	
	n=8000	 t=149	 t=28	 t=48	
	n=16000	 t=586	 t=89	 t=197	
	n=32000	 t=2513	 t=338	 t=780	
	n=64000	 t=9288	 t=1373	 t=3101	

Details

  1. Use this (or the .zip of it on examplesFromClass) as a model (feel free to copy paste any code you like).
  2. Initialize the lists at random with numbers between 0 and n (where n is the length of the list)
  3. Test your sorts with n=8 or 10, to make sure they actually work! Come up with some way that it is quick to demonstrate that they work when you demo (i.e. a button, or menu item, or test module of whatever stripe you like).

Demo your code during lab for credit.