Mam taki kawałem kodu, który sortuje wysokości prostokątów. Sortuje prawidłowo, ale chciałbym aby sortował w czasie rzeczywistym, czyli żeby było widać jak krok po kroku przestawia elementy, a nie od razu końcowy efekt. Jak mogę zatrzymać pętlę, narysować przestawiony element i kontynuować pętlę? Jakieś pomysły?
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class graf extends Applet implements ActionListener
{
Button b1, b2;
private int szer, wys;
public int[] tab;
int iloscDanych;
int szerDanych=1;
public void ilosc(int a) {
iloscDanych=a;
}
public void losuj(int a) {
int[] tmp = new int[iloscDanych];
double przyrost = wys / (double) tmp.length;
for (int i = 0; i < tmp.length; i++)
{
if(a==2 || a==3)
tmp[i] = (int)((i+1) * przyrost);
if(a==1)
tmp[i] = (int)((tmp.length-i) * przyrost);
}
if(a==3) {
for (int i = 0; i < tmp.length; i++) {
int j = (int)((i+1) * Math.random());
int t = tmp[i];
tmp[i] = tmp[j];
tmp[j] = t;
}
}
tab=tmp;
}
public void init()
{
Dimension d=getSize();
szer=d.width;
wys=d.height;
ilosc(50);
b1=new Button("Losuj");
add(b1);
b2=new Button("Sortuj");
add(b2);
b1.addActionListener(this);
b2.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
Sortuj sortuj=new Sortuj();
if(e.getSource()==b1) {
losuj(3);
repaint();
}
if(e.getSource()==b2) {
sortuj.babelkowe(tab);
repaint();
}
}
public void paint(Graphics g) {
int x = 0;
g.setColor(Color.gray);
for (int i = 0; i < tab.length; i++, x += ((szer-(szerDanych*iloscDanych))/iloscDanych)+szerDanych)
{
g.fillRect(x, wys-tab[i], (szer-(szerDanych*iloscDanych))/iloscDanych, wys);
}
}
}
class Sortuj
{
int licznikPorownan = 0;
int licznikPrzesuniec = 0;
public void babelkowe(int[] tab) {
for (int i = 0; i < tab.length - 1; i++) {
for (int j = tab.length - 1; j > i; j--) {
if (tab[j] < tab[j - 1]) {
int temp = tab[j];
tab[j] = tab[j - 1];
tab[j - 1] = temp;
licznikPrzesuniec++;
}
licznikPorownan++;
}
}
}
}