Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 7ce8b43

Browse files
committed
Firtst part done
1 parent 51f08db commit 7ce8b43

File tree

2 files changed

+102
-1
lines changed

2 files changed

+102
-1
lines changed

‎SortingAlgorithm.java‎

Lines changed: 102 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,112 @@
11
import java.awt.Color;
2+
import java.awt.Dimension;
3+
import java.awt.Graphics;
4+
import java.awt.Graphics2D;
5+
import java.awt.geom.Rectangle2D;
6+
import java.util.Random;
27

38
import javax.swing.JFrame;
49
import javax.swing.JPanel;
10+
import javax.swing.SwingUtilities;
11+
import javax.swing.SwingWorker;
512

613
public class SortingAlgorithm extends JPanel {
14+
private final int WIDTH = 800, HEIGHT = WIDTH * 9 /16;
15+
private final int SIZE = 200; // the number if sorting elements
16+
private final float BAR_WIDTH = (float)WIDTH / SIZE; // bar width
17+
private float[] bar_height = new float[SIZE]; // height of bars
18+
private SwingWorker<Void, Void> shuffler, sorter;
19+
private int current_index, traversing_index;
20+
721
SortingAlgorithm() {
8-
setBackground(Color.BLUE);
22+
setBackground(Color.BLACK);
23+
setPreferredSize(new Dimension(WIDTH, HEIGHT));
24+
initBarHeight(); // initialize the height of each bar
25+
initSorter();
26+
initShuffler();
27+
}
28+
29+
@Override
30+
public void paintComponent(Graphics g) {
31+
super.paintComponent(g);
32+
33+
Graphics2D g2d = (Graphics2D)g;
34+
g2d.setColor(Color.CYAN);
35+
Rectangle2D.Float bar;
36+
for(int i = 0; i < SIZE; i++ ) {
37+
bar = new Rectangle2D.Float(i * BAR_WIDTH, 0, BAR_WIDTH, bar_height[i]);
38+
g2d.fill(bar); // g2d.draw(bar);
39+
}
40+
41+
g2d.setColor(Color.RED);
42+
bar = new Rectangle2D.Float(current_index * BAR_WIDTH, 0, BAR_WIDTH, bar_height[current_index]);
43+
g2d.fill(bar);
44+
45+
g2d.setColor(Color.GREEN);
46+
bar = new Rectangle2D.Float(traversing_index * BAR_WIDTH, 0, BAR_WIDTH, bar_height[traversing_index]);
47+
g2d.fill(bar);
48+
}
49+
50+
public void initBarHeight() {
51+
float interval = (float)HEIGHT / SIZE;
52+
for(int i = 0; i < SIZE; i++) {
53+
bar_height[i] = i * interval;
54+
}
55+
}
56+
57+
public void initSorter() {
58+
sorter = new SwingWorker<>() {
59+
@Override
60+
public Void doInBackground() throws InterruptedException {
61+
for(current_index = 1; current_index < SIZE; current_index++) {
62+
traversing_index = current_index;
63+
while(traversing_index > 0 && bar_height[traversing_index] < bar_height[traversing_index - 1]) {
64+
swap(traversing_index, traversing_index - 1);
65+
traversing_index--;
66+
67+
Thread.sleep(1);
68+
repaint();
69+
}
70+
}
71+
current_index = 0;
72+
traversing_index = 0;
73+
74+
return null;
75+
}
76+
};
77+
}
78+
79+
public void initShuffler() {
80+
shuffler = new SwingWorker<>() {
81+
@Override
82+
public Void doInBackground() throws InterruptedException {
83+
int middle = SIZE / 2;
84+
for (int i = 0, j = middle; i < middle; i++, j++) {
85+
int randow_index = new Random().nextInt(SIZE);
86+
swap(i, randow_index);
87+
88+
randow_index = new Random().nextInt(SIZE);
89+
swap(j, randow_index);
90+
91+
Thread.sleep(10);
92+
repaint();
93+
}
94+
return null;
95+
}
96+
97+
@Override
98+
public void done() {
99+
super.done();
100+
sorter.execute();
101+
}
102+
};
103+
shuffler.execute();
104+
}
105+
106+
public void swap(int indexA, int indexB) {
107+
float temp = bar_height[indexA];
108+
bar_height[indexA] = bar_height[indexB];
109+
bar_height[indexB] = temp;
9110
}
10111

11112
}
File renamed without changes.

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /