ti ho allegato le due classi che utilizzo allegerite


codice:
class SortAlgorithm {
    /**
     * oggetto sort.
     */
    private SortItem parent;

    /**
     * Se vero stop ord.
     */
    protected boolean stopRequested = false;

    /**
     * Set padre.
     */
    public void setParent(SortItem p) {
	parent = p;
    }

    /**
     * Pause .
     */
    protected void pause() throws Exception {
	if (stopRequested) {
	    throw new Exception("Sort Algorithm");
	}
	parent.pause(parent.h1, parent.h2,parent.temp);
    }

    /**
     * Pause .
     */
    protected void pause(int H1) throws Exception {
	if (stopRequested) {
	    throw new Exception("Sort Algorithm");
	}
	parent.pause(H1, parent.h2,parent.temp);
    }

    /**
     * Pause e segna  oggetto1 & 2.
     */
    protected void pause(int H1, int H2,int T) throws Exception {
	if (stopRequested) {
	    throw new Exception("Sort Algorithm");
	}
	parent.pause(H1, H2,T);
    }

    /**
     * Stop ord.
     */
    public void stop() {
	stopRequested = true;
    }

    /**
     * inizializza
     */
    public void init() {
	stopRequested = false;
    }

    /**
     * metodo chiamato per ord array
     * 
     */
    void sort(int a[]) throws Exception {
    }
}



codice:
public class SortItem
    extends Applet
    implements Runnable, MouseListener {

    /**
     * thread che ordina).
     */
    private Thread kicker;

    /**
     *  array che deve be ordinato
     */
    int []arr= new int[13];
    
    
    int mid=0;
    int temp=0;
    int app=0;

    /**
     * Limite sup.
     */
    int h1 = -1;

    /**
     * Limite inf
     */
    int h2 = -1;

    /**
     * nome algo.
     */
    String algName;  

    /**
     * algo di ord.
     */
    SortAlgorithm algorithm;

    Dimension initialSize = null;  

	private JButton jBStart = null;
	

	private Image img = null;  
	
	private JPanel jPCarte = null;

	private JRadioButton jRBB = null;

	private JRadioButton jRBQ = null;

	private JRadioButton jRBH = null;

	private JRadioButton jRBI = null;

	private JLabel jLabel = null;
	
	ButtonGroup bc = new ButtonGroup(  );  

	private JButton jBNuovoOrd = null;

	 String at = "";

	private JSlider jSlider = null;

	private JLabel jLabel1 = null;

	int sleep=0;
	
	int paint=0;
	
	
	/**
	 * Questo metodo genera i numeri da 1 a 13	
	 */
	public void GenNum (){
		Random rgen = new Random();  
		  
		for (int i=0; i<arr.length; i++) {
		    arr[i] = i+1;
		}
		for (int i=0; i<arr.length; i++) {
		    int randomPosition = rgen.nextInt(arr.length);
		    int temp = arr[i];
		    arr[i] = arr[randomPosition];
		    arr[randomPosition] = temp;
		}
		}
	
	

    /**
     * Pause 
     * @see SortAlgorithm
     */
    void pause() {
	pause(-1, -1,0);
    }

    /**
     * Pause 
     * @see SortAlgorithm
     */
    void pause(int H1) {
	pause(H1, -1,0);
    }

    /**
     * Pause 
     * @see SortAlgorithm
     */
    void pause(int H1, int H2,int T) {
	h1 = H1;
	h2 = H2;
	temp=T;
	if (kicker != null) {
		//System.out.println("pause");
		repaint();
	}
	//System.out.println("Sleep"+sleep);
	try {Thread.sleep(sleep);} catch (InterruptedException e){}
    }

    /**
     * Initialize the applet.
     */
    public void init() {
    	this.setLayout(null);
    	this.setSize(new Dimension(1006, 501));
	jLabel1 = new JLabel();
	jLabel1.setBounds(new Rectangle(445, 111, 206, 24));
	jLabel1.setDisplayedMnemonic(KeyEvent.VK_UNDEFINED);
	jLabel1.setText("Seleziona la velocità di esecuzione");
	jLabel = new JLabel();
	jLabel.setBounds(new Rectangle(29, 26, 234, 19));
	jLabel.setText("Seleziona l'algoritmo");
	

	this.setName("PSfondo");
	this.add(getJBStart(), null);
	this.add(getJPCarte(), null);

	 this.setVisible(true);
	 this.add(getJRBB(), null);
	 this.add(getJRBQ(), null);
	 this.add(getJRBH(), null);
	 this.add(getJRBI(), null);
	 this.add(jLabel, null);
	 this.add(getJBNuovoOrd(), null);
	//addMouseListener(this);
	 this.add(getJSlider(), null);
	 this.add(jLabel1, null);
	bc.add(jRBB);
	bc.add(jRBH);
	bc.add(jRBQ);
	bc.add(jRBI);
	jBNuovoOrd.setEnabled(false);
	
	this.setVisible(true);
	 GenNum();
    }

    public void start() {
        h1 = h2 = -1; 
        GenNum();  
        
        //System.out.println("start"+"indice:"+h1+" "+ h2);
        repaint();
        showStatus(getParameter("alg"));
    }

    /**
     * Deallocate resources of applet.
     */
    public void destroy() {
        removeMouseListener(this);
    }

    /**
     * Paint the array of numbers as a list
     * of horizontal lines of varying lengths.
     */
    public void paintComponent(Graphics g) {
    	super.paintComponents(g);
        int pos=50;
        int a[] = arr;
      
        ... ho eliminato tutta la parte dei disegni
        
  }
     

    /**
     * Update without erasing the background.
     */
    public void update(Graphics g) {
    //	System.out.println("update");
    	paintComponent(g);
    }

    /**
     * Run the sorting algorithm. This method is
     * called by class Thread once the sorting algorithm
     * is started.
     * @see java.lang.Thread#run
     * @see SortItem#mouseUp
     */
    public void run() {
    	sleep=jSlider.getValue()*1000;
	try {
	    if (algorithm == null) {
		algorithm = (SortAlgorithm)Class.forName(algName).newInstance();
		algorithm.setParent(this);
	    }
	    algorithm.init();
	    algorithm.sort(arr);
	} catch(Exception e) {
	}
    }

    /**
     * Stop the applet. Kill any sorting algorithm that
     * is still sorting.
     */
    public synchronized void stop() {
	if (algorithm != null){
            try {
		algorithm.stop();
            } catch (IllegalThreadStateException e) {
                // ignore this exception
            }
            kicker = null;
	}
    }

    /**
     * For a Thread to actually do the sorting. This routine makes
     * sure we do not simultaneously start several sorts if the user
     * repeatedly clicks on the sort item.  It needs to be
     * synchronized with the stop() method because they both
     * manipulate the common kicker variable.
     */
    private synchronized void startSort() {
	if (kicker == null || !kicker.isAlive()) {
	    kicker = new Thread(this);
	    kicker.start();
	}
    }


    public void mouseClicked(MouseEvent e) {
        showStatus(getParameter("alg"));
    }