/* * Sorting.java by Burton Rosenberg * 24 September 1996 (c) all rights reserved * */ import java.awt.* ; import java.applet.Applet ; public class Sorting extends Applet implements Runnable { Panel controls = new Panel() ; Button shakeButton = new Button("Shake"), stepButton = new Button("Step"), sortButton = new Button("Selection Sort") ; final int N = 20 ; final int P = 23 ; final int M = 7 ; static final int SWAPPING = 1 ; static final int SWAPPED = 2 ; int [] table = new int[N] ; int [] status = new int[N] ; SortingView sortingView = new SortingView(table,status) ; public void init() { //controls.add( shakeButton ) ; //controls.add( stepButton ) ; controls.add( sortButton ) ; setLayout( new BorderLayout() ) ; add( "North", controls ) ; add( "Center", sortingView ) ; initialize( table, status ) ; validate() ; } void initialize( int [] table, int [] status ) { for ( int i = 0 ; i < table.length; i++ ) { table[i] = (int)(Math.random()*((double)table.length)) ; status[i] = 0 ; } nextIndexToSort = 0 ; } public boolean action (Event e, Object a ) { if ( e.target==shakeButton ) { if ( runThread != null ) return true ; initialize( table, status ) ; sortingView.repaint() ; return true ; } if ( e.target==stepButton ) { if ( runThread != null ) return true ; sortOneStep( table, status ) ; sortingView.repaint() ; return true ; } if ( e.target==sortButton ) { if ( runThread == null ) { runThread = new Thread(this) ; initialize( table,status ) ; runThread.start() ; } return true ; } return false ; } int nextIndexToSort ; boolean sortOneStep( int [] table, int [] status ) { int i ; // get min in nextIndexToSort .. table.length-1 if ( nextIndexToSort >= table.length ) return false ; boolean willSwap = false ; int swap1, swap2 ; swap1 = swap2 = -1 ; for ( i = 0; i