Skip to content

Instantly share code, notes, and snippets.

@lazypower
Created April 15, 2012 20:19
Show Gist options
  • Save lazypower/2394658 to your computer and use it in GitHub Desktop.
Save lazypower/2394658 to your computer and use it in GitHub Desktop.
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