Created
April 15, 2012 20:19
-
-
Save lazypower/2394658 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package week3lab2; | |
import java.awt.*; | |
import java.util.ArrayList; | |
import java.util.Collections; | |
import javax.swing.*; | |
public class Week3Lab2 extends JApplet { | |
private DisplayArrayPanel displayArrayPanel1 = new DisplayArrayPanel(); | |
private int[] numbers1 = initializeNumbers(); | |
private DisplayArrayPanel displayArrayPanel2 = new DisplayArrayPanel(); | |
private int[] numbers2 = numbers1.clone(); | |
private DisplayArrayPanel displayArrayPanel3 = new DisplayArrayPanel(); | |
private int[] numbers3 = numbers1.clone(); | |
private int PAUSE_TIME = 250; | |
public Week3Lab2() | |
{ | |
setLayout(new GridLayout(1, 4)); | |
// show the first sort alg. | |
displayArrayPanel1.setNumbers(numbers1); | |
JPanel panel1 = new JPanel(new BorderLayout()); | |
panel1.add(new JLabel("Selection Sort", JLabel.CENTER), BorderLayout.NORTH); | |
add(panel1); | |
// show the first sort alg. | |
displayArrayPanel2.setNumbers(numbers2); | |
JPanel panel2 = new JPanel(new BorderLayout()); | |
panel2.add(new JLabel("Insertion Sort", JLabel.CENTER), BorderLayout.NORTH); | |
add(panel2); | |
// show the first sort alg. | |
displayArrayPanel3.setNumbers(numbers3); | |
JPanel panel3 = new JPanel(new BorderLayout()); | |
panel3.add(new JLabel("Bubble Sort", JLabel.CENTER), BorderLayout.NORTH); | |
add(panel3); | |
new Thread(new Runnable() { | |
public void run() { | |
selectionSort(numbers1); | |
} | |
}).start(); | |
new Thread(new Runnable() { | |
public void run() { | |
insertionSort(numbers2); | |
} | |
}).start(); | |
new Thread(new Runnable() { | |
public void run() { | |
bubbleSort(numbers3); | |
} | |
}).start(); | |
} | |
public void selectionSort(int[] list) { | |
// page 200 | |
for (int i = list.length - 1; i >= 1; i--) | |
{ | |
int currentMax = list[0]; | |
int currentMaxIndex = 0; | |
for (int j = 1; j <= i; j++) | |
{ | |
if(currentMax < list[j]) | |
{ | |
currentMax = list[j]; | |
currentMaxIndex = j; | |
} | |
} | |
// swap? yep, swap. | |
if (currentMaxIndex != i) { | |
list[currentMaxIndex] = list[i]; | |
list[i] = currentMax; | |
} | |
} | |
// use this to repaint the panel | |
try { | |
Thread.sleep(PAUSE_TIME); | |
} | |
catch (InterruptedException e) {} | |
displayArrayPanel1.repaint(); | |
} | |
public void insertionSort(int[] list) { | |
for (int i= 1; i < list.length; i++) { | |
int currentElement = list[i]; | |
int k; | |
for (k = i - 1; k >= 0 && list[k] > currentElement; k--) { | |
list[k+1] = list[k]; | |
} | |
// use this to repaint the panel | |
try { | |
Thread.sleep(PAUSE_TIME); | |
} | |
catch (InterruptedException e) {} | |
displayArrayPanel2.repaint(); | |
} | |
} | |
public void bubbleSort(int[] list) | |
{ | |
// page 837 | |
boolean needNextPass = true; | |
for (int k = 1; k < list.length && needNextPass; k++) | |
{ | |
needNextPass = false; | |
for (int i = 0; i < list.length - k; i++) | |
{ | |
if (list[i] > list[i + 1]) | |
{ | |
int temp = list[i]; | |
list[i] = list[i + 1]; | |
list[i + 1] = temp; | |
needNextPass = true;// Yep still need it | |
} | |
} | |
} | |
// use this to repaint the panel | |
try { | |
Thread.sleep(PAUSE_TIME); | |
} | |
catch (InterruptedException e) {} | |
displayArrayPanel3.repaint(); | |
} | |
public int[] initializeNumbers() { | |
int[] numbers = new int[50]; | |
for(int i = 0; i < numbers.length; i++) | |
{ | |
numbers[i] = i + 1; | |
} | |
java.util.List<Integer> list = new ArrayList<Integer>(); | |
for (int i = 0; i < numbers.length; i++) | |
{ | |
list.add(numbers[i]); | |
} | |
Collections.shuffle(list); | |
for(int i = 0; i < list.size(); i++) { | |
System.out.println(list.get(i)); | |
} | |
Object[] objects = list.toArray(); | |
for(int i = 0; i < list.size(); i++) { | |
numbers[i] = Integer.parseInt(objects[i].toString()); | |
} | |
return numbers; | |
} | |
public static void main(String[] args) { | |
Week3Lab2 applet = new Week3Lab2(); | |
JFrame frame = new JFrame(); | |
frame.setTitle("Sort ALL THE THINGS! - inefficiently"); | |
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | |
frame.getContentPane().add(applet, BorderLayout.CENTER); | |
applet.init(); | |
applet.start(); | |
frame.setSize(600, 160); | |
frame.setLocationRelativeTo(null); | |
frame.setVisible(true); | |
} | |
} | |
class DisplayArrayPanel extends JPanel { | |
int[] numbers; | |
public void setNumbers(int[] numbers) { | |
this.numbers = numbers; | |
repaint(); | |
} | |
protected void paintComponent(Graphics g) { | |
super.paintComponent(g); | |
// find max int | |
int max = numbers[0]; | |
for (int i = 1; i < numbers.length; i++) | |
{ | |
if (max < numbers[i]) | |
{ | |
max = numbers[i]; | |
} | |
} | |
//draw pretty representation of the data | |
int height = (int)(getSize().height * 0.98); | |
int width = getSize().width; | |
int unitWidth = (int)(width * 1.0 / numbers.length); | |
for (int i = 0; i < numbers.length; i++) | |
{ | |
g.drawRect( | |
(int)(i * unitWidth), | |
getSize().height - (int)((numbers[i] * 1.0 / max) * height), | |
(int)(unitWidth), getSize().height); | |
} | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment