summaryrefslogtreecommitdiff
path: root/labs/lab08_gnome_sort/SortingFrame.java
diff options
context:
space:
mode:
Diffstat (limited to 'labs/lab08_gnome_sort/SortingFrame.java')
-rw-r--r--labs/lab08_gnome_sort/SortingFrame.java106
1 files changed, 106 insertions, 0 deletions
diff --git a/labs/lab08_gnome_sort/SortingFrame.java b/labs/lab08_gnome_sort/SortingFrame.java
new file mode 100644
index 0000000..6ceb49e
--- /dev/null
+++ b/labs/lab08_gnome_sort/SortingFrame.java
@@ -0,0 +1,106 @@
+import java.util.Random;
+
+import javax.swing.JFrame;
+
+public class SortingFrame
+{
+ public static void main(String[] args) throws InterruptedException
+ {
+ JFrame frame = new JFrame();
+
+ int[] data = randomIntArray(40);
+ VisualSortingComponent vsc = new VisualSortingComponent(data);
+ frame.setTitle("Sorting Visualization");
+ frame.setSize(500,500);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.add(vsc);
+ frame.setVisible(true);
+
+ Thread.sleep(50);
+
+ //bubbleSort(data,vsc);
+ gnomeSort(data,vsc);
+
+ }
+
+ public static void bubbleSort(int[] data, VisualSortingComponent vsc) throws InterruptedException
+ {
+ int size = data.length;
+
+ for(int i = 0; i < size; i++)
+ {
+ for(int j = 0; j < size - 1; j++)
+ {
+ if(data[j] > data[j + 1])
+ {
+ int temp = data[j];
+ data[j] = data[j + 1];
+ data[j + 1] = temp;
+ vsc.repaint();
+ Thread.sleep(10);
+ }
+ }
+ }
+ }
+
+ public static void gnomeSort(int[] data, VisualSortingComponent vsc) throws InterruptedException
+ {
+ int last = data[0];
+ for(int i = 1; i < data.length; i++)
+ {
+ //System.out.println("Sorting " + i);
+ if(data[i] < last)
+ {
+ //System.out.println("\tDoing work");
+ //The data is out of order, do some work
+ int j = i;
+ while(j>0)
+ {
+ if(data[j-1]>data[j])
+ {
+ //System.out.println("\tSwaping " + (j-1) + " and " + j);
+ data = swap(data,j-1,j);
+ j--;
+ vsc.repaint();
+ Thread.sleep(10);
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+ last = data[i];
+ }
+ }
+ private static int[] swap(int[] data, int ind1, int ind2)
+ {
+ int tmp = data[ind1];
+ data[ind1] = data[ind2];
+ data[ind2] = tmp;
+ return data;
+ }
+
+ public static int[] randomIntArray(int size)
+ {
+ int[] result = new int[size];
+
+ for(int i = 1; i <= size; i++)
+ {
+ result[i - 1] = i;
+ }
+
+ Random rand = new Random();
+
+ for(int i = 0; i < size * 100; i++)
+ {
+ int first = rand.nextInt(size);
+ int second = rand.nextInt(size);
+ int temp = result[first];
+ result[first] = result[second];
+ result[second] = temp;
+ }
+
+ return result;
+ }
+}