diff --git a/.classpath b/.classpath
deleted file mode 100644
index a948582b..00000000
--- a/.classpath
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index 412eeda7..00000000
--- a/.gitattributes
+++ /dev/null
@@ -1,22 +0,0 @@
-# Auto detect text files and perform LF normalization
-* text=auto
-
-# Custom for Visual Studio
-*.cs diff=csharp
-*.sln merge=union
-*.csproj merge=union
-*.vbproj merge=union
-*.fsproj merge=union
-*.dbproj merge=union
-
-# Standard to msysgit
-*.doc diff=astextplain
-*.DOC diff=astextplain
-*.docx diff=astextplain
-*.DOCX diff=astextplain
-*.dot diff=astextplain
-*.DOT diff=astextplain
-*.pdf diff=astextplain
-*.PDF diff=astextplain
-*.rtf diff=astextplain
-*.RTF diff=astextplain
diff --git a/.gitignore b/.gitignore
index 5241a722..1d850ee0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,4 @@
-*.class
\ No newline at end of file
+*.class
+.idea/
+
+ArrayVisualizer.iml
diff --git a/.project b/.project
deleted file mode 100644
index 09bece30..00000000
--- a/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
- ArrayVisualizer-master
-
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
- org.zeroturnaround.eclipse.rebelXmlBuilder
-
-
-
-
-
- org.eclipse.jdt.core.javanature
-
-
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 87b7a7a3..00000000
--- a/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,13 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.release=disabled
-org.eclipse.jdt.core.compiler.source=1.8
diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 7103be72..00000000
--- a/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.ui.text.custom_code_templates=
diff --git a/ArrayVisualizer.iml b/ArrayVisualizer.iml
new file mode 100644
index 00000000..78b2cc53
--- /dev/null
+++ b/ArrayVisualizer.iml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index c8c17f8b..00000000
--- a/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-MIT License
-
-Copyright (c) 2019 w0rthy
-Copyright (c) 2019 MusicTheorist
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/README.md b/README.md
deleted file mode 100644
index e596d4ba..00000000
--- a/README.md
+++ /dev/null
@@ -1,118 +0,0 @@
-# w0rthy's Array Visualizer, Revamped
-[](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=Q5QLCFZ8G7WY6¤cy_code=USD&source=url)
-
-76 sorting algorithms demonstrated through 10 unique graphic designs
-
-This new version of the program features additions inspired by Timo Bingmann's "The Sound of Sorting" and w0rthy's updates to the original visualizer.
-
-To build (After -cp, use ";" with Windows and ":" with Mac/Linux):
-```
-ant
-java -cp bin;lib/classgraph-4.8.47.jar main.ArrayVisualizer
-```
-
-### Features:
-- 40+ new sorting algorithms
-- Updated visuals and sound effects
-- You can select different array sizes now
-- New shuffle types, including reversed, mostly similar numbers, almost sorted, and already sorted
-- Skip Sort button
-- Softer sounds toggle
-- A real time in milliseconds estimate
-- Toggle shuffle animation
-- Toggle Timo Bingmann's "end sweep" animation
-- Refactored / optimized code
-
-## 10/19/2019 - Version 2.1
-- Both Odd-Even Mergesorts now display comparisons
-- PDQSort's Insertion Sorts have been slowed down
-- New sorts, courtesy of Piotr Grochowski (https://github.com/PiotrGrochowski/ArrayVisualizer):
- - Iterative Pairwise Sorting Network
- - Recursive Pairwise Sorting Network
- - Recursive Combsort
-
-## 10/13/2019 - Version 2.0 is now released!
-- Now includes 73 sorting algorithms, with 2 more that will be finished in the future
- - NEW SORTS:
- - Unoptimized Bubble Sort
- - Rotation-based In-Place Merge Sort
- - "Lazy Stable Sort" from Andrey Astrelin's GrailSort
- - Grail sorting with a static buffer
- - Grail sorting with a dynamic buffer
- - Andrey Astrelin's "SqrtSort"
- - CircleSort
- - Introspective CircleSort
- - Orson Peters' "Pattern-Defeating Quicksort" (PDQSort)
- - Branchless PDQSort
- - Morween's implementation of "Poplar Heapsort"
- - Recursive Binary Quicksort
- - Iterative Binary Quicksort
- - Iterative Bitonic Sort
- - Iterative Odd-Even Mergesort
- - "Bubble Bogosort"
- - "Exchange Bogosort"
- - Treesort
- - Optimized Gnomesort with Binary Search
- - "Cocktail Mergesort" (https://www.youtube.com/watch?v=fWubJgIWyxQ)
- - NOTE: "Quick Shell Sort" has been removed.
-- Significantly refactored code, more object-oriented
-- Optimized visuals -- the program runs smoother than ever!
-- Plug-and-play functionality -- using classgraph, you can now easily add your own sorting algorithms to the program! Documentation on that will be available in the future.
-- Sort delay system redesigned -- you can now change the speed of the program in the middle of a delayed compare or swap
-- Speed dialogue is now disabled while other windows are open
-- WikiSort no longer gets stuck on sorting its internal buffer
-- Tweaks to TimSort, mostly reimplementing its binary insertion sort
-- Binary Insertion Sort is now stable
-- The write/swap counts for inputs already sorted are fixed
-- The main/auxillary array write counts for Bottom-up Merge are fixed
-- Shuffling the array now clears the statistics
-- The highest pitches of the program's sound effects are fixed
-- Speeds for the "green sweep" and shuffling animations have been tweaked
-- Shatter Sort's highlights slightly tweaked
-- GrailSort's highlights slightly tweaked
-
-**KNOWN BUGS:**
-- Certain sorts (comb sort, radix sorts) cause the program to forget the current speed
-- Certain sorts do not work with the "Skip Sort" button
-- Linked Dots visual has an extra, static line
-- Missing soundfont
-- SkaSort and HolyGrailSort produce errors -- this is normal, they aren't finished yet
-- No circular pointer -- will be fixed soon
-
-**PLANS FOR FUTURE RELEASES:**
-- Javadocs!!
-- SkaSort
-- "Holy Grail Sort"
-- Options to:
- - Enter in your own set of numbers
- - Select CombSort gap sequence
- - Select ShellSort gap sequence
- - Change TimSort "minrun" value
- - Change IntroSort threshold for insertion/heap sort
- - Change Simple Shatter Sort rate(?)
- - Stop Run All Sorts(?)
- - Stop TimeSort(?)
-- Pre-shuffled arrays
-- Organize list of sorts into more categories
-- Run All Sorts in specific category
-- Subheadings for customizable sorts (e.g. display the number of buckets during a bucket sort)
-- Justified statistics(??)
-- Sort an array up to 16,384 (2^14) numbers
-- "Many Similar" distribution ((i/5) * 5, as an example)
-- Fixed circular pointer with much cleaner math
-- Toogle between pointer and black bar with circular visuals
-- Refactor/reorganize prompts and frames
-- Cleaner:
- - Counting Sort
- - Tree Sort
- - getters/setters
- - method parameters
-- Small organizational changes
-
-**If you are experiencing performance issues in Windows 10, look here: https://superuser.com/questions/988379/how-do-i-run-java-apps-upscaled-on-a-high-dpi-display**
-
-An executable .jar file is available in the dist folder. Have fun!
-
-Videos this program is featured in:
-
-https://www.youtube.com/playlist?list=PL5w_-zMAJC8tSgmfaltMMj7Kn390eRzMq
diff --git a/build.xml b/build.xml
deleted file mode 100644
index aafdcb33..00000000
--- a/build.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/dist/arrayVisualizer.jar b/dist/arrayVisualizer.jar
deleted file mode 100644
index 18954343..00000000
Binary files a/dist/arrayVisualizer.jar and /dev/null differ
diff --git a/lib/classgraph-4.8.47-javadoc.jar b/lib/classgraph-4.8.47-javadoc.jar
deleted file mode 100644
index 62aed633..00000000
Binary files a/lib/classgraph-4.8.47-javadoc.jar and /dev/null differ
diff --git a/lib/classgraph-4.8.47-sources.jar b/lib/classgraph-4.8.47-sources.jar
deleted file mode 100644
index 0542dbc8..00000000
Binary files a/lib/classgraph-4.8.47-sources.jar and /dev/null differ
diff --git a/lib/classgraph-4.8.47.jar b/lib/classgraph-4.8.47.jar
deleted file mode 100644
index 7a1a1f9a..00000000
Binary files a/lib/classgraph-4.8.47.jar and /dev/null differ
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 00000000..df4e5708
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,84 @@
+
+
+ 4.0.0
+
+ org.example
+ ArrayVisualizer
+ 2.3.5
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 8
+ 8
+
+
+
+
+ maven-resources-plugin
+ 2.6
+
+
+ copy-resources
+ validate
+
+ copy-resources
+
+
+
+ ${basedir}/target/resources
+
+
+
+ src/main/resources
+ true
+
+ **/*
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.0
+
+
+ package
+
+ shade
+
+
+ ${project.artifactId}-${project.version}
+ ${project.build.directory}
+
+
+ main.ArrayVisualizer
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+ io.github.classgraph
+ classgraph
+ 4.8.66
+
+
+
diff --git a/src/SortPrompt.form b/src/SortPrompt.form
deleted file mode 100644
index 08d82518..00000000
--- a/src/SortPrompt.form
+++ /dev/null
@@ -1,138 +0,0 @@
-
-
-
diff --git a/src/UtilFrame.form b/src/UtilFrame.form
deleted file mode 100644
index 13edae8e..00000000
--- a/src/UtilFrame.form
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
-
diff --git a/src/ViewPrompt.form b/src/ViewPrompt.form
deleted file mode 100644
index 9860af11..00000000
--- a/src/ViewPrompt.form
+++ /dev/null
@@ -1,169 +0,0 @@
-
-
-
diff --git a/bin/SortPrompt.form b/src/main/java/SortPrompt.form
similarity index 100%
rename from bin/SortPrompt.form
rename to src/main/java/SortPrompt.form
diff --git a/bin/UtilFrame.form b/src/main/java/UtilFrame.form
similarity index 100%
rename from bin/UtilFrame.form
rename to src/main/java/UtilFrame.form
diff --git a/bin/ViewPrompt.form b/src/main/java/ViewPrompt.form
similarity index 100%
rename from bin/ViewPrompt.form
rename to src/main/java/ViewPrompt.form
diff --git a/src/frames/ArrayFrame.java b/src/main/java/frames/ArrayFrame.java
similarity index 96%
rename from src/frames/ArrayFrame.java
rename to src/main/java/frames/ArrayFrame.java
index aa2c99c3..8a79f60b 100644
--- a/src/frames/ArrayFrame.java
+++ b/src/main/java/frames/ArrayFrame.java
@@ -42,6 +42,8 @@ of this software and associated documentation files (the "Software"), to deal
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+
+
*
*/
@@ -50,7 +52,7 @@ of this software and associated documentation files (the "Software"), to deal
* @author S630690
*/
-final public class ArrayFrame extends javax.swing.JFrame {
+final public class ArrayFrame extends JFrame {
final private static long serialVersionUID = 1L;
private int[] array;
@@ -89,8 +91,7 @@ public void reposition(){
// //GEN-BEGIN:initComponents
private void initComponents() {
- this.jLabel1 = new javax.swing.JLabel();
- this.jSlider = new javax.swing.JSlider(SwingConstants.VERTICAL, 1, 12, 11);
+ this.jLabel1 = new JLabel();
jLabel1.setText("Array Size");
@@ -109,6 +110,10 @@ private void initComponents() {
labels.put(10, new JLabel("1024"));
labels.put(11, new JLabel("2048"));
labels.put(12, new JLabel("4096"));
+ labels.put(13, new JLabel("8192"));
+ labels.put(14, new JLabel("16384"));
+
+ this.jSlider = new javax.swing.JSlider(SwingConstants.VERTICAL, 1, labels.size(), 6);
jSlider.setMajorTickSpacing(1);
jSlider.setLabelTable(labels);
@@ -154,7 +159,7 @@ public void stateChanged(ChangeEvent event) {
}// //GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
- private javax.swing.JLabel jLabel1;
+ private JLabel jLabel1;
private javax.swing.JSlider jSlider;
// End of variables declaration//GEN-END:variables
}
\ No newline at end of file
diff --git a/src/frames/UtilFrame.java b/src/main/java/frames/UtilFrame.java
similarity index 54%
rename from src/frames/UtilFrame.java
rename to src/main/java/frames/UtilFrame.java
index e58297c1..7efa4016 100644
--- a/src/frames/UtilFrame.java
+++ b/src/main/java/frames/UtilFrame.java
@@ -4,15 +4,9 @@
*/
package frames;
-import java.awt.Toolkit;
-import java.util.Hashtable;
+import java.awt.*;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.SwingConstants;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
+import javax.swing.*;
import main.ArrayManager;
import main.ArrayVisualizer;
@@ -20,9 +14,7 @@
import prompts.SortPrompt;
import prompts.ViewPrompt;
import templates.Frame;
-import utils.Delays;
-import utils.Highlights;
-import utils.Sounds;
+import utils.*;
import utils.Timer;
/*
@@ -48,18 +40,19 @@ of this software and associated documentation files (the "Software"), to deal
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+
+
*
*/
/**
- *
* @author S630690
*/
-final public class UtilFrame extends javax.swing.JFrame {
+final public class UtilFrame extends JFrame {
final private static long serialVersionUID = 1L;
private int[] array;
-
+
private ArrayManager ArrayManager;
private ArrayVisualizer ArrayVisualizer;
private Delays Delays;
@@ -69,18 +62,19 @@ final public class UtilFrame extends javax.swing.JFrame {
private Timer RealTimer;
private Sounds Sounds;
+
public UtilFrame(int[] array, ArrayVisualizer arrayVisualizer) {
this.array = array;
-
+
this.ArrayVisualizer = arrayVisualizer;
this.ArrayManager = ArrayVisualizer.getArrayManager();
-
+
this.Delays = ArrayVisualizer.getDelays();
this.Frame = ArrayVisualizer.getMainWindow();
this.Highlights = ArrayVisualizer.getHighlights();
this.RealTimer = ArrayVisualizer.getTimer();
this.Sounds = ArrayVisualizer.getSounds();
-
+
setUndecorated(true);
initComponents();
setLocation(Math.min((int) Toolkit.getDefaultToolkit().getScreenSize().getWidth() - getWidth(), Frame.getX() + Frame.getWidth()), Frame.getY() + 29);
@@ -88,17 +82,18 @@ public UtilFrame(int[] array, ArrayVisualizer arrayVisualizer) {
setVisible(true);
}
- public void reposition(ArrayFrame af){
+ public void reposition(ArrayFrame af) {
toFront();
setLocation(Math.min((int) Toolkit.getDefaultToolkit().getScreenSize().getWidth() - getWidth(), Frame.getX() + Frame.getWidth() + af.getWidth()), Frame.getY() + 29);
- if(this.abstractFrame != null && abstractFrame.isVisible())
+ if (this.abstractFrame != null && abstractFrame.isVisible())
abstractFrame.reposition();
}
// //GEN-BEGIN:initComponents
private void initComponents() {
- this.jLabel1 = new javax.swing.JLabel();
+ this.jLabel1 = new JLabel();
+ this.marksSettingsLbl = new JLabel();
this.jButton1 = new javax.swing.JButton();
this.jButton2 = new javax.swing.JButton();
this.jButton3 = new javax.swing.JButton();
@@ -106,18 +101,26 @@ private void initComponents() {
this.jCheckBox2 = new javax.swing.JCheckBox();
this.jButton4 = new javax.swing.JButton();
this.jCheckBox3 = new javax.swing.JCheckBox();
+ this.disableMarksCB = new javax.swing.JCheckBox();
+ this.delayORCheckBox = new javax.swing.JCheckBox();
+ this.additionalMarksCB = new javax.swing.JCheckBox();
+ this.sortedMarksCB = new javax.swing.JCheckBox();
+ this.dotsLimitCB = new javax.swing.JCheckBox();
+ this.strokeCB = new javax.swing.JCheckBox();
this.jCheckBox4 = new javax.swing.JCheckBox();
this.jButton5 = new javax.swing.JButton();
+ this.FPSBtn = new javax.swing.JButton();
this.jCheckBox5 = new javax.swing.JCheckBox();
this.jButton6 = new javax.swing.JButton();
this.jCheckBox6 = new javax.swing.JCheckBox();
this.jCheckBox7 = new javax.swing.JCheckBox();
this.jCheckBox8 = new javax.swing.JCheckBox();
- this.jSlider = new javax.swing.JSlider(SwingConstants.VERTICAL, 1, 12, 11);
+ //this.jSlider = new javax.swing.JSlider(SwingConstants.VERTICAL, 1, 12, 6);
jLabel1.setText("Settings");
+ marksSettingsLbl.setText("Marks Settings:");
- setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
+ /*setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
Hashtable labels = new Hashtable<>();
labels.put(1, new JLabel("2"));
@@ -132,6 +135,7 @@ private void initComponents() {
labels.put(10, new JLabel("1024"));
labels.put(11, new JLabel("2048"));
labels.put(12, new JLabel("4096"));
+ labels.put(13, new JLabel("8192"));
jSlider.setMajorTickSpacing(1);
jSlider.setLabelTable(labels);
@@ -143,7 +147,7 @@ private void initComponents() {
public void stateChanged(ChangeEvent event) {
ArrayVisualizer.setCurrentLength((int) Math.pow(2, jSlider.getValue()));
}
- });
+ });*/
jButton1ResetText();
jButton1.addActionListener(new java.awt.event.ActionListener() {
@@ -165,7 +169,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent evt) {
- jButton3ActionPerformed();
+ showSleepChanger();
}
});
@@ -177,6 +181,9 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
}
});
+ FPSBtn.setText("Change FPS");
+ FPSBtn.addActionListener(evt -> changeFPS());
+
jCheckBox1.setSelected(true);
jCheckBox1.setText("Show Shuffle");
jCheckBox1.addActionListener(new java.awt.event.ActionListener() {
@@ -203,6 +210,62 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
jCheckBox3ActionPerformed();
}
});
+ delayORCheckBox.setSelected(false);
+ delayORCheckBox.setText("Delay Override");
+ delayORCheckBox.addActionListener(new java.awt.event.ActionListener() {
+ @Override
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ delayORCheckBoxActionPerformed();
+ }
+ });
+
+ disableMarksCB.setSelected(false);
+ disableMarksCB.setText("Disable Marks");
+ disableMarksCB.setMargin(new Insets(disableMarksCB.getInsets().top, 20, 0, 0));
+ disableMarksCB.addActionListener(new java.awt.event.ActionListener() {
+ @Override
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ disableMarksCheckBoxActionPerformed();
+ }
+ });
+
+ additionalMarksCB.setSelected(true);
+ additionalMarksCB.setText("Additional Marks");
+ additionalMarksCB.setMargin(new Insets(0, 20, 0, 0));
+ additionalMarksCB.addActionListener(new java.awt.event.ActionListener() {
+ @Override
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ AdditionalMarksCBActionPerformed();
+ }
+ });
+
+ sortedMarksCB.setSelected(true);
+ sortedMarksCB.setText("Sorted Marks");
+ sortedMarksCB.setMargin(new Insets(sortedMarksCB.getInsets().top, 20, 0, 0));
+ sortedMarksCB.addActionListener(new java.awt.event.ActionListener() {
+ @Override
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ sortedMarksCBActionPerformed();
+ }
+ });
+
+ strokeCB.setSelected(true);
+ strokeCB.setText("Enable Bars Stroke");
+ strokeCB.addActionListener(new java.awt.event.ActionListener() {
+ @Override
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ strokeCBActionPerformed();
+ }
+ });
+
+ dotsLimitCB.setSelected(true);
+ dotsLimitCB.setText("Dots Display Limit");
+ dotsLimitCB.addActionListener(new java.awt.event.ActionListener() {
+ @Override
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ dotsLimitCBActionPerformed();
+ }
+ });
jCheckBox4.setSelected(true);
jCheckBox4.setText("Calc Real Time");
@@ -269,73 +332,97 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER, true)
- .addGroup(layout.createSequentialGroup()
- .addContainerGap()
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER, true)
- .addComponent(this.jLabel1)
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, true)
- .addComponent(this.jCheckBox1)
- .addComponent(this.jCheckBox2)
- .addComponent(this.jCheckBox3)
- .addComponent(this.jCheckBox4)
- .addComponent(this.jCheckBox6)
- .addComponent(this.jCheckBox7)
- .addComponent(this.jCheckBox8)
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, true)
- .addComponent(this.jCheckBox5)
- .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
- .addComponent(this.jButton6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(this.jButton5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(this.jButton4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(this.jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(this.jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(this.jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))))
- .addGap(0, 10, Short.MAX_VALUE))
- );
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER, true)
+ .addComponent(this.jLabel1)
+ .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, true)
+ .addComponent(this.jCheckBox1)
+ .addComponent(this.jCheckBox2)
+ .addComponent(this.dotsLimitCB)
+ .addComponent(this.jCheckBox3)
+ .addComponent(this.marksSettingsLbl)
+ .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING, true))
+ .addComponent(this.additionalMarksCB)
+ .addComponent(this.sortedMarksCB)
+ .addComponent(this.disableMarksCB)
+ .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING))
+ .addComponent(this.strokeCB)
+ .addComponent(this.jCheckBox4)
+ .addComponent(this.jCheckBox6)
+ .addComponent(this.jCheckBox7)
+ .addComponent(this.jCheckBox8)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, true)
+ .addComponent(this.jCheckBox5)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
+ .addComponent(this.jButton6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(this.jButton5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(this.jButton4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(this.jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
+ .addComponent(this.delayORCheckBox).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
+ .addComponent(this.jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(this.FPSBtn, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(this.jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))))))
+ .addGap(0, 10, Short.MAX_VALUE))
+ );
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, true)
- .addGroup(layout.createSequentialGroup()
- .addGap(5, 5, 5)
- .addComponent(this.jLabel1)
- .addGap(7, 7, 7)
- .addComponent(this.jButton2)
- .addGap(5, 5, 5)
- .addComponent(this.jCheckBox2)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(this.jCheckBox8)
- .addGap(7, 7, 7)
- .addComponent(this.jButton3)
- .addGap(12, 12, 12)
- .addComponent(this.jButton1)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(this.jButton4)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(this.jButton6)
- .addGap(7, 7, 7)
- .addComponent(this.jCheckBox1)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(this.jCheckBox7)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(this.jCheckBox5)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(this.jCheckBox3)
- .addGap(8, 8, 8)
- .addComponent(this.jButton5)
- .addGap(5, 5, 5)
- .addComponent(this.jCheckBox6)
- .addComponent(this.jCheckBox4))
- );
+ .addGroup(layout.createSequentialGroup()
+ .addGap(5, 5, 5)
+ .addComponent(this.jLabel1)
+ .addGap(7, 7, 7)
+ .addComponent(this.jButton2)
+ .addGap(5, 5, 5)
+ .addComponent(this.jCheckBox2)
+ .addComponent(this.dotsLimitCB)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(this.jCheckBox8)
+ .addComponent(this.strokeCB)
+ .addGap(7, 7, 7)
+ .addComponent(this.marksSettingsLbl)
+ .addGap(5, 5, 5)
+ .addComponent(this.additionalMarksCB)
+ .addComponent(this.sortedMarksCB)
+ .addComponent(this.disableMarksCB)
+ .addGap(7, 7, 7)
+ .addComponent(this.jButton3)
+ .addGap(5, 5, 5)
+ .addComponent(this.delayORCheckBox)
+ .addGap(12, 12, 12)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(this.jButton1)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(this.jButton4)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(this.jButton6)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(this.FPSBtn)
+ .addGap(7, 7, 7)
+ .addComponent(this.jCheckBox1)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(this.jCheckBox7)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(this.jCheckBox5)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(this.jCheckBox3)
+ .addGap(8, 8, 8)
+ .addComponent(this.jButton5)
+ .addGap(5, 5, 5)
+ .addComponent(this.jCheckBox6)
+ .addComponent(this.jCheckBox4))
+ );
pack();
}// //GEN-END:initComponents
private void jButton1ActionPerformed() {//GEN-FIRST:event_jButton1ActionPerformed
//CHANGE SORT
- if(this.abstractFrame != null && abstractFrame.isVisible()){
+ if (this.abstractFrame != null && abstractFrame.isVisible()) {
boolean tmp = this.abstractFrame instanceof SortPrompt;
abstractFrame.dispose();
jButton1ResetText();
- if(tmp)
+ if (tmp)
return;
}
this.abstractFrame = new SortPrompt(this.array, this.ArrayVisualizer, this.Frame, this);
@@ -351,11 +438,11 @@ public void jButton1ResetText() {
private void jButton2ActionPerformed() {//GEN-FIRST:event_jButton2ActionPerformed
// TODO add your handling code here:
//CHANGE VIEW
- if(this.abstractFrame != null && abstractFrame.isVisible()){
+ if (this.abstractFrame != null && abstractFrame.isVisible()) {
boolean tmp = this.abstractFrame instanceof ViewPrompt;
jButton2ResetText();
abstractFrame.dispose();
- if(tmp)
+ if (tmp)
return;
}
this.abstractFrame = new ViewPrompt(this.ArrayVisualizer, this.Frame, this);
@@ -368,29 +455,70 @@ public void jButton2ResetText() {
jButton2.setText("Visual Style");
}
+ public void dotsLimitCBActionPerformed(){
+ ArrayVisualizer.setIsDotsLimited(dotsLimitCB.isSelected());
+ }
+
private void jButton3ActionPerformed() {//GEN-FIRST:event_jButton3ActionPerformed
boolean speedPromptAllowed;
-
- if(this.abstractFrame == null) {
+ Delays.setIsOverride(false);
+
+ if (this.abstractFrame == null) {
speedPromptAllowed = true;
- }
- else if(!this.abstractFrame.isVisible()) {
+ } else if (!this.abstractFrame.isVisible()) {
speedPromptAllowed = true;
- }
- else {
+ } else {
speedPromptAllowed = false;
}
-
- if(speedPromptAllowed) {
- try{
+
+ if (speedPromptAllowed) {
+ try {
Delays.setSleepRatio(Double.parseDouble(JOptionPane.showInputDialog(null, "Modify the visual's speed below (Ex. 10 = Ten times faster)", Delays.getSleepRatio())));
- }
- catch(Exception e) { //TODO: Disable exception on Dialog cancel
+ // Delays.changeSkipped(false);
+ } catch (Exception e) { //TODO: Disable exception on Dialog cancel
System.out.println("Not a number! (" + e.getMessage() + ")");
}
}
}//GEN-LAST:event_jButton3ActionPerformed
+ public void showChangeDelay(){
+ Delays.setDelayOverride(Double.parseDouble(JOptionPane.showInputDialog(null, "Modify the step delay (Ex. 1 = 1ms delay)", Delays.getCurrentDelay())));
+ }
+
+ public void showSleepChanger(){
+ if(delayORCheckBox.isSelected()){
+ Delays.setIsOverride(true);
+ showChangeDelay();
+ }else{
+ Delays.setIsOverride(false);
+ jButton3ActionPerformed();
+ }
+ Delays.changeSkipped(false);
+ }
+
+ public void disableMarksCheckBoxActionPerformed(){
+ Highlights.setMarksEnabled(!disableMarksCB.isSelected());
+ Highlights.clearAllMarks();
+ }
+
+ public void strokeCBActionPerformed(){
+ ArrayVisualizer.Renderer.Bars.setStrokeEnabled(strokeCB.isSelected());
+ }
+
+ public void sortedMarksCBActionPerformed(){
+ Highlights.setSortedMarksEnabled(sortedMarksCB.isSelected());
+ Highlights.clearAllMarks(Mark.TYPE_SORTED);
+ }
+
+ public void AdditionalMarksCBActionPerformed(){
+ Highlights.setAdditionalMarksEnabled(additionalMarksCB.isSelected());
+ Highlights.clearAllMarks(Mark.TYPE_ADDITIONAL);
+ }
+
+ public void setFPSBtnEnabled(boolean enabled){
+ FPSBtn.setEnabled(enabled);
+ }
+
private void jCheckBox1ActionPerformed() {//GEN-FIRST:event_jCheckBox2ActionPerformed
ArrayVisualizer.toggleShuffleAnimation(jCheckBox1.isSelected());
}//GEN-LAST:event_jCheckBox1ActionPerformed
@@ -403,8 +531,25 @@ private void jCheckBox3ActionPerformed() {//GEN-FIRST:event_jCheckBox3ActionPerf
Highlights.toggleFancyFinishes(jCheckBox3.isSelected());
}//GEN-LAST:event_jCheckBox3ActionPerformed
+ private void delayORCheckBoxActionPerformed(){
+ if(delayORCheckBox.isSelected()) {
+ Delays.setIsOverride(true);
+ jButton3.setText("Change Delay");
+ showChangeDelay();
+ //jButton3.addActionListener(evt -> showChangeDelay());
+ }else{
+ Delays.setIsOverride(false);
+ jButton3.setText("Change Speed");
+ //jButton3.addActionListener(evt -> jButton3ActionPerformed());
+ }
+ }
+
+ private void changeFPS(){
+ ArrayVisualizer.setFPS(Integer.parseInt(JOptionPane.showInputDialog(null, "Set the FPS. More FPS - smoother animation, but more GPU load.", ArrayVisualizer.getFPS())));
+ }
+
private void jButton4ActionPerformed() {//GEN-FIRST:event_jButton4ActionPerformed
- Delays.setSleepRatio(Double.MAX_VALUE);
+ //Delays.setSleepRatio(Double.MAX_VALUE);
Delays.changeSkipped(true);
}//GEN-LAST:event_jButton4ActionPerformed
@@ -417,21 +562,20 @@ private void jButton5ActionPerformed() {//GEN-FIRST:event_jButton4ActionPerforme
}//GEN-LAST:event_jButton6ActionPerformed
private void jCheckBox5ActionPerformed() {//GEN-FIRST:event_jButton4ActionPerformed
- if(jCheckBox5.isSelected()) {
+ if (jCheckBox5.isSelected()) {
Sounds.changeVolume(0.01);
- }
- else {
+ } else {
Sounds.changeVolume(1);
}
}//GEN-LAST:event_jCheckBox5ActionPerformed
private void jButton6ActionPerformed() {//GEN-FIRST:event_jButton2ActionPerformed
//CHANGE SIZE
- if(this.abstractFrame != null && abstractFrame.isVisible()){
+ if (this.abstractFrame != null && abstractFrame.isVisible()) {
boolean tmp = this.abstractFrame instanceof ShufflePrompt;
abstractFrame.dispose();
jButton6ResetText();
- if(tmp)
+ if (tmp)
return;
}
this.abstractFrame = new ShufflePrompt(this.ArrayManager, this.Frame, this);
@@ -457,21 +601,29 @@ private void jCheckBox8ActionPerformed() {//GEN-FIRST:event_jButton4ActionPerfor
}//GEN-LAST:event_jCheckBox8ActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
- private javax.swing.JLabel jLabel1;
+ private JLabel jLabel1;
+ private JLabel marksSettingsLbl;
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
private javax.swing.JButton jButton5;
+ private javax.swing.JButton FPSBtn;
private javax.swing.JButton jButton6;
private javax.swing.JCheckBox jCheckBox1;
+ private javax.swing.JCheckBox disableMarksCB;
+ private javax.swing.JCheckBox strokeCB;
+ private javax.swing.JCheckBox additionalMarksCB;
+ private javax.swing.JCheckBox sortedMarksCB;
+ private javax.swing.JCheckBox dotsLimitCB;
private javax.swing.JCheckBox jCheckBox2;
private javax.swing.JCheckBox jCheckBox3;
+ private javax.swing.JCheckBox delayORCheckBox;
private javax.swing.JCheckBox jCheckBox4;
private javax.swing.JCheckBox jCheckBox5;
private javax.swing.JCheckBox jCheckBox6;
private javax.swing.JCheckBox jCheckBox7;
private javax.swing.JCheckBox jCheckBox8;
- private javax.swing.JSlider jSlider;
+ // private javax.swing.JSlider jSlider;
// End of variables declaration//GEN-END:variables
}
\ No newline at end of file
diff --git a/src/main/ArrayManager.java b/src/main/java/main/ArrayManager.java
similarity index 100%
rename from src/main/ArrayManager.java
rename to src/main/java/main/ArrayManager.java
diff --git a/src/main/ArrayVisualizer.java b/src/main/java/main/ArrayVisualizer.java
similarity index 90%
rename from src/main/ArrayVisualizer.java
rename to src/main/java/main/ArrayVisualizer.java
index 408de023..f697b13c 100644
--- a/src/main/ArrayVisualizer.java
+++ b/src/main/java/main/ArrayVisualizer.java
@@ -1,14 +1,6 @@
package main;
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.Image;
-import java.awt.Stroke;
-import java.awt.Toolkit;
+import java.awt.*;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
@@ -47,6 +39,7 @@
* - - "0th" Linked Dot
* - - .dls file in soundfont dir
* - - 1080p in OBS(?)
+ * - - Visual time doesn't match on sorts with same real time while Delay Override is in use
* - Create:
* - - Better code design for ViewPrompt
* - - options to choose comb gap
@@ -67,6 +60,11 @@
* - - option for custom parts for intro sorts
* - - option for simple shatter rate???
* - - Timo Bingmann's green sweep also *verify* a sorted array
+ * - - Bars Stroke
+ * - - Text Antialiasing
+ * - - FPS Changing
+ * - - Delay Override
+ * - - Fix Speed after skip sort
* - Finish:
* - - SkaSort
* - - HolyGrailSort
@@ -124,6 +122,8 @@ of this software and associated documentation files (the "Software"), to deal
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+
+
*
*/
@@ -133,7 +133,7 @@ final public class ArrayVisualizer {
final boolean OBS = false; // Change to true if you want 1080p for recording with OBS
final private int MIN_ARRAY_VAL = 2;
- final private int MAX_ARRAY_VAL = 4096;
+ final private int MAX_ARRAY_VAL = 16384;
final int[] array = new int[this.MAX_ARRAY_VAL];
@@ -142,6 +142,7 @@ final public class ArrayVisualizer {
private String[] InvalidSorts;
private volatile int currentLen;
+ private double threadDelay = 16.67;
private ArrayManager ArrayManager;
private SortAnalyzer SortAnalyzer;
@@ -187,14 +188,16 @@ final public class ArrayVisualizer {
private Delays Delays;
private Highlights Highlights;
private Reads Reads;
- private Renderer Renderer;
+ public Renderer Renderer;
private Sounds Sounds;
private Timer Timer;
private VisualStyles VisualStyles;
private Writes Writes;
+ private Boolean isDotsLimited = true;
+
public ArrayVisualizer() {
- this.currentLen = 2048;
+ this.currentLen = 64;
this.Delays = new Delays();
this.Highlights = new Highlights(this.MAX_ARRAY_VAL);
@@ -249,16 +252,21 @@ public ArrayVisualizer() {
@Override
public void run() {
Renderer.initializeVisuals(ArrayVisualizer.this, ArrayVisualizer.this.VisualStyles);
-
while(true) {
+ try {
+ Thread.sleep((long) threadDelay);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
Renderer.updateVisuals(ArrayVisualizer.this);
Renderer.drawVisual(ArrayVisualizer.this.VisualStyles, array, ArrayVisualizer.this, mainRender, extraRender, Highlights);
-
int coltmp = 255;
mainRender.setColor(new Color(coltmp,coltmp,coltmp));
if(TEXTDRAW) {
Font f = mainRender.getFont();
mainRender.setFont(typeFace);
+ mainRender.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
+ RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
mainRender.drawString(category + ": " + heading, 15, (int)(cw/1280.0*40)+30);
mainRender.drawString(formatter.format(currentLen) + " Numbers", 15, (int)(cw/1280.0*65)+30);
mainRender.drawString(String.format("Delay: " + formatter.format(Delays.getCurrentDelay()) + "ms"), 15, (int)(cw/1280.0*105)+30);
@@ -279,7 +287,22 @@ public void run() {
Sounds.startAudioThread();
this.drawWindows();
}
-
+ public void setFPS(int fps){
+ this.threadDelay = 1000/(double)fps;
+ }
+
+ public int getFPS(){
+ return (int) Math.round(1000/this.threadDelay);
+ }
+
+ public void setIsDotsLimited(boolean value){
+ this.isDotsLimited = value;
+ }
+
+ public Boolean getIsDotsLimited(){
+ return this.isDotsLimited;
+ }
+
public ArrayManager getArrayManager() {
return this.ArrayManager;
}
@@ -496,7 +519,7 @@ public synchronized void fancyFinish() {
}
for(int i = 0; i < this.currentLen + this.getLogBaseTwoOfLength(); i++) {
- if(i < this.currentLen) Highlights.markArray(1, i);
+ if(i < this.currentLen) Highlights.markArray(Highlights.getMaximumLength() + 1, i);
Highlights.incrementFancyFinishPosition();
Delays.sleep(sleepRatio / this.getLogBaseTwoOfLength());
@@ -512,11 +535,26 @@ public void endSort() {
Highlights.clearAllMarks();
if(Highlights.fancyFinishEnabled()) {
- double speed = Delays.getSleepRatio();
- this.fancyFinish();
- Delays.setSleepRatio(speed);
-
- Highlights.clearAllMarks();
+ if(Delays.isDelayOverrided()){
+ double curDelay = Delays.getCurrentDelay();
+ Delays.setIsOverride(false);
+ double speed = Delays.getSleepRatio();
+ this.fancyFinish();
+ Delays.setSleepRatio(speed);
+ Delays.changeSkipped(false);
+ Highlights.clearAllMarks();
+ UtilFrame.setFPSBtnEnabled(true);
+ Delays.setIsOverride(true);
+ Delays.setCurrentDelay(curDelay);
+ }else{
+ double speed = Delays.getSleepRatio();
+ this.fancyFinish();
+ Delays.setSleepRatio(speed);
+ Delays.changeSkipped(false);
+ Highlights.clearAllMarks();
+ UtilFrame.setFPSBtnEnabled(true);
+ }
+
}
}
diff --git a/src/main/SortAnalyzer.java b/src/main/java/main/SortAnalyzer.java
similarity index 100%
rename from src/main/SortAnalyzer.java
rename to src/main/java/main/SortAnalyzer.java
diff --git a/src/prompts/ShufflePrompt.java b/src/main/java/prompts/ShufflePrompt.java
similarity index 98%
rename from src/prompts/ShufflePrompt.java
rename to src/main/java/prompts/ShufflePrompt.java
index b6144d30..b8bf1dfb 100644
--- a/src/prompts/ShufflePrompt.java
+++ b/src/main/java/prompts/ShufflePrompt.java
@@ -41,7 +41,7 @@ of this software and associated documentation files (the "Software"), to deal
*
* @author S630690
*/
-final public class ShufflePrompt extends javax.swing.JFrame implements Frame {
+final public class ShufflePrompt extends JFrame implements Frame {
/**
*
diff --git a/src/prompts/SortPrompt.java b/src/main/java/prompts/SortPrompt.java
similarity index 98%
rename from src/prompts/SortPrompt.java
rename to src/main/java/prompts/SortPrompt.java
index 1dc03b3c..9205452c 100644
--- a/src/prompts/SortPrompt.java
+++ b/src/main/java/prompts/SortPrompt.java
@@ -44,7 +44,7 @@ of this software and associated documentation files (the "Software"), to deal
* @author S630690
*/
-final public class SortPrompt extends javax.swing.JFrame implements Frame {
+final public class SortPrompt extends JFrame implements Frame {
private static final long serialVersionUID = 1L;
@@ -218,6 +218,7 @@ public void run(){
}
}
}.start();
+ UtilFrame.setFPSBtnEnabled(false);
UtilFrame.jButton1ResetText();
dispose();
}//GEN-LAST:event_jButton1ActionPerformed
@@ -237,6 +238,7 @@ public void run(){
}
}
}.start();
+ UtilFrame.setFPSBtnEnabled(false);
UtilFrame.jButton1ResetText();
dispose();
}//GEN-LAST:event_jList1ValueChanged
@@ -251,6 +253,7 @@ public void run() {
sortThread.ReportComparativeSort(array, selection);
}
}.start();
+ UtilFrame.setFPSBtnEnabled(false);
UtilFrame.jButton1ResetText();
dispose();
}//GEN-LAST:event_jList2ValueChanged
diff --git a/src/prompts/ViewPrompt.java b/src/main/java/prompts/ViewPrompt.java
similarity index 99%
rename from src/prompts/ViewPrompt.java
rename to src/main/java/prompts/ViewPrompt.java
index b2d76efe..d8dad20e 100644
--- a/src/prompts/ViewPrompt.java
+++ b/src/main/java/prompts/ViewPrompt.java
@@ -42,7 +42,7 @@ of this software and associated documentation files (the "Software"), to deal
* @author S630690
*/
-final public class ViewPrompt extends javax.swing.JFrame implements Frame {
+final public class ViewPrompt extends JFrame implements Frame {
private static final long serialVersionUID = 1L;
diff --git a/src/sorts/AmericanFlagSort.java b/src/main/java/sorts/AmericanFlagSort.java
similarity index 98%
rename from src/sorts/AmericanFlagSort.java
rename to src/main/java/sorts/AmericanFlagSort.java
index a81e5f0e..51302121 100644
--- a/src/sorts/AmericanFlagSort.java
+++ b/src/main/java/sorts/AmericanFlagSort.java
@@ -89,7 +89,7 @@ private void sort(int[] array, int start, int length, int divisor) {
int digit = 0;
for (int i = start; i < length; i++) {
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
Delays.sleep(0.75);
int d = array[i];
diff --git a/src/sorts/BadSort.java b/src/main/java/sorts/BadSort.java
similarity index 88%
rename from src/sorts/BadSort.java
rename to src/main/java/sorts/BadSort.java
index 05597961..dcb95939 100644
--- a/src/sorts/BadSort.java
+++ b/src/main/java/sorts/BadSort.java
@@ -31,16 +31,16 @@ public BadSort(Delays delayOps, Highlights markOps, Reads readOps, Writes writeO
public void runSort(int[] array, int currentLen, int bucketCount) {
for (int i = 0; i < currentLen; i++) {
int shortest = i;
- Highlights.markArray(3, shortest);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, shortest);
Delays.sleep(0.05);
for (int j = i; j < currentLen; j++) {
- Highlights.markArray(1, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, j);
Delays.sleep(0.05);
boolean isShortest = true;
for (int k = j + 1; k < currentLen; k++) {
- Highlights.markArray(2, k);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, k);
Delays.sleep(0.05);
if (Reads.compare(array[j], array[k]) == 1) {
diff --git a/src/sorts/BinaryGnomeSort.java b/src/main/java/sorts/BinaryGnomeSort.java
similarity index 88%
rename from src/sorts/BinaryGnomeSort.java
rename to src/main/java/sorts/BinaryGnomeSort.java
index 4c21dbda..ce4af510 100644
--- a/src/sorts/BinaryGnomeSort.java
+++ b/src/main/java/sorts/BinaryGnomeSort.java
@@ -31,9 +31,9 @@ public void runSort(int[] array, int length, int bucketCount) {
while (lo < hi) {
int mid = lo + ((hi - lo) / 2);
- Highlights.markArray(1, lo);
- Highlights.markArray(2, mid);
- Highlights.markArray(3, hi);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, lo);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, mid);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, hi);
Delays.sleep(0.025);
diff --git a/src/sorts/BinaryInsertionSort.java b/src/main/java/sorts/BinaryInsertionSort.java
similarity index 100%
rename from src/sorts/BinaryInsertionSort.java
rename to src/main/java/sorts/BinaryInsertionSort.java
diff --git a/src/sorts/BinaryMergeSort.java b/src/main/java/sorts/BinaryMergeSort.java
similarity index 100%
rename from src/sorts/BinaryMergeSort.java
rename to src/main/java/sorts/BinaryMergeSort.java
diff --git a/src/sorts/BinaryQuickSort.java b/src/main/java/sorts/BinaryQuickSort.java
similarity index 100%
rename from src/sorts/BinaryQuickSort.java
rename to src/main/java/sorts/BinaryQuickSort.java
diff --git a/src/sorts/BitonicSort.java b/src/main/java/sorts/BitonicSort.java
similarity index 94%
rename from src/sorts/BitonicSort.java
rename to src/main/java/sorts/BitonicSort.java
index aeed3bad..5c3313f5 100644
--- a/src/sorts/BitonicSort.java
+++ b/src/main/java/sorts/BitonicSort.java
@@ -39,8 +39,8 @@ private static int greatestPowerOfTwoLessThan(int n){
private void compare(int[] A, int i, int j, boolean dir)
{
- Highlights.markArray(1, i);
- Highlights.markArray(2, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, j);
Delays.sleep(0.5);
diff --git a/src/sorts/BogoSort.java b/src/main/java/sorts/BogoSort.java
similarity index 100%
rename from src/sorts/BogoSort.java
rename to src/main/java/sorts/BogoSort.java
diff --git a/src/sorts/BottomUpMergeSort.java b/src/main/java/sorts/BottomUpMergeSort.java
similarity index 89%
rename from src/sorts/BottomUpMergeSort.java
rename to src/main/java/sorts/BottomUpMergeSort.java
index 813434b0..71f6500a 100644
--- a/src/sorts/BottomUpMergeSort.java
+++ b/src/main/java/sorts/BottomUpMergeSort.java
@@ -46,24 +46,24 @@ private void merge (int[] c, int[] d, int lt, int md, int rt, boolean activeSoun
if (Reads.compare(c[i], c[j]) <= 0) {
if(activeSound) {
Writes.write(d, k++, c[i++], 0.5, false, true);
- Highlights.markArray(1, i);
- Highlights.markArray(2, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, j);
}
else {
Writes.write(d, k++, c[i++], 0.5, false, false);
- Highlights.markArray(1, k - 1);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, k - 1);
Highlights.clearMark(2);
}
}
else {
if(activeSound) {
Writes.write(d, k++, c[j++], 0.5, false, true);
- Highlights.markArray(1, j);
- Highlights.markArray(2, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, i);
}
else {
Writes.write(d, k++, c[j++], 0.5, false, false);
- Highlights.markArray(1, k - 1);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, k - 1);
Highlights.clearMark(2);
}
}
@@ -98,7 +98,7 @@ private void mergePass (int[] x, int[] y, int s, int n, boolean activeSound)
else
for (int j = i; j <= n-1; j++) {
Writes.write(y, j, x[j], 1, false, activeSound); // copy last segment to y
- Highlights.markArray(1, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, j);
Highlights.clearMark(2);
}
diff --git a/src/sorts/BranchedPDQSort.java b/src/main/java/sorts/BranchedPDQSort.java
similarity index 100%
rename from src/sorts/BranchedPDQSort.java
rename to src/main/java/sorts/BranchedPDQSort.java
diff --git a/src/sorts/BranchlessPDQSort.java b/src/main/java/sorts/BranchlessPDQSort.java
similarity index 100%
rename from src/sorts/BranchlessPDQSort.java
rename to src/main/java/sorts/BranchlessPDQSort.java
diff --git a/src/sorts/BubbleBogoSort.java b/src/main/java/sorts/BubbleBogoSort.java
similarity index 96%
rename from src/sorts/BubbleBogoSort.java
rename to src/main/java/sorts/BubbleBogoSort.java
index 844011f6..15746a59 100644
--- a/src/sorts/BubbleBogoSort.java
+++ b/src/main/java/sorts/BubbleBogoSort.java
@@ -53,7 +53,7 @@ public void runSort(int[] array, int currentLen, int bucketCount) {
while(!this.bogoIsSorted(array, currentLen)){
int index1 = (int) (Math.random() * (currentLen - 1));
- Highlights.markArray(1, index1);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, index1);
if(Reads.compare(array[index1], array[index1 + 1]) == 1){
Writes.swap(array, index1, index1 + 1, 1, true, false);
diff --git a/src/sorts/BubbleSort.java b/src/main/java/sorts/BubbleSort.java
similarity index 93%
rename from src/sorts/BubbleSort.java
rename to src/main/java/sorts/BubbleSort.java
index cb9df361..8ba4909c 100644
--- a/src/sorts/BubbleSort.java
+++ b/src/main/java/sorts/BubbleSort.java
@@ -60,8 +60,8 @@ public void runSort(int[] array, int length, int bucketCount) {
sorted = false;
}
- Highlights.markArray(1, i);
- Highlights.markArray(2, i + 1);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, i + 1);
Delays.sleep(0.025);
}
}
diff --git a/src/sorts/CircleSort.java b/src/main/java/sorts/CircleSort.java
similarity index 100%
rename from src/sorts/CircleSort.java
rename to src/main/java/sorts/CircleSort.java
diff --git a/src/sorts/CocktailBogoSort.java b/src/main/java/sorts/CocktailBogoSort.java
similarity index 91%
rename from src/sorts/CocktailBogoSort.java
rename to src/main/java/sorts/CocktailBogoSort.java
index a1c7259b..a02eb1e4 100644
--- a/src/sorts/CocktailBogoSort.java
+++ b/src/main/java/sorts/CocktailBogoSort.java
@@ -39,12 +39,12 @@ public void runSort(int[] array, int currentLen, int bucketCount) {
}
if(minSorted) {
- Highlights.markArray(1, minIterator);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, minIterator);
minIterator++;
minSorted = false;
}
if(maxSorted) {
- Highlights.markArray(2, maxIterator);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, maxIterator);
maxIterator--;
maxSorted = false;
}
diff --git a/src/sorts/CocktailMergeSort.java b/src/main/java/sorts/CocktailMergeSort.java
similarity index 100%
rename from src/sorts/CocktailMergeSort.java
rename to src/main/java/sorts/CocktailMergeSort.java
diff --git a/src/sorts/CocktailShakerSort.java b/src/main/java/sorts/CocktailShakerSort.java
similarity index 83%
rename from src/sorts/CocktailShakerSort.java
rename to src/main/java/sorts/CocktailShakerSort.java
index e0ae5260..5879ad5a 100644
--- a/src/sorts/CocktailShakerSort.java
+++ b/src/main/java/sorts/CocktailShakerSort.java
@@ -1,10 +1,14 @@
package sorts;
import templates.Sort;
-import utils.Delays;
-import utils.Highlights;
-import utils.Reads;
-import utils.Writes;
+import utils.*;
+
+import java.awt.*;
+
+/*
+DO Time: Not Tested
+AddMarks: Working
+ */
/*
*
@@ -56,22 +60,25 @@ private void cocktailShaker(int[] array, int start, int end, double sleep) {
Writes.swap(array, j, j + 1, sleep, true, false);
}
- Highlights.markArray(1, j);
- Highlights.markArray(2, j + 1);
+ Highlights.markArray(Highlights.getMaximumLength()+1, j);
+ Highlights.markArray(Highlights.getMaximumLength()+2, j + 1);
Delays.sleep(0.01);
}
+
for(int j = end + start - i - 1; j > i; j--){
if(Reads.compare(array[j], array[j - 1]) == -1) {
Writes.swap(array, j, j - 1, sleep, true, false);
}
- Highlights.markArray(1, j);
- Highlights.markArray(2, j - 1);
+ Highlights.markArray(Highlights.getMaximumLength()+1, j);
+ Highlights.markArray(Highlights.getMaximumLength()+2, j - 1);
Delays.sleep(0.01);
}
-
+ Highlights.markArray(i, i, Color.GREEN, Mark.TYPE_SORTED);
+ Highlights.markArray(end + start - i - 1, end + start - i - 1, Color.GREEN, Mark.TYPE_SORTED);
+
i++;
}
}
diff --git a/src/sorts/CombSort.java b/src/main/java/sorts/CombSort.java
similarity index 100%
rename from src/sorts/CombSort.java
rename to src/main/java/sorts/CombSort.java
diff --git a/src/sorts/CountingSort.java b/src/main/java/sorts/CountingSort.java
similarity index 95%
rename from src/sorts/CountingSort.java
rename to src/main/java/sorts/CountingSort.java
index f9c5e280..adbb87d0 100644
--- a/src/sorts/CountingSort.java
+++ b/src/main/java/sorts/CountingSort.java
@@ -59,7 +59,7 @@ public void runSort(int[] array, int length, int bucketCount) {
for(int i = 0; i < length; i++){
Writes.write(counts, array[i], counts[array[i]] + 1, 0.5, false, true);
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
}
for (int i = 1; i <= max; i++) {
Writes.write(counts, i, counts[i] + counts[i - 1], 1, true, true);
@@ -75,7 +75,7 @@ public void runSort(int[] array, int length, int bucketCount) {
Writes.write(array, i, output[i], 1, false, false);
Writes.changeTempWrites(1);
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
}
}
}
\ No newline at end of file
diff --git a/src/sorts/CycleSort.java b/src/main/java/sorts/CycleSort.java
similarity index 80%
rename from src/sorts/CycleSort.java
rename to src/main/java/sorts/CycleSort.java
index 310e3b26..92d2c4bc 100644
--- a/src/sorts/CycleSort.java
+++ b/src/main/java/sorts/CycleSort.java
@@ -45,15 +45,15 @@ public void runSort(int[] array, int length, int bucketCount) {
*/
int pos = cycleStart;
- Highlights.markArray(3, pos);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, pos);
for (int i = cycleStart + 1; i < length; i++) {
- Highlights.markArray(2, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, i);
Delays.sleep(0.01);
if (Reads.compare(array[i], val) == -1) {
pos++;
- Highlights.markArray(1, pos);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, pos);
Delays.sleep(0.01);
}
@@ -61,14 +61,14 @@ public void runSort(int[] array, int length, int bucketCount) {
// there aren't any
if (pos == cycleStart) {
- Highlights.markArray(1, pos);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, pos);
continue;
}
// Skip duplicates
while (val == array[pos]) {
pos++;
- Highlights.markArray(1, pos);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, pos);
}
// Put val into final position
@@ -82,22 +82,22 @@ public void runSort(int[] array, int length, int bucketCount) {
*/
while (pos != cycleStart) {
pos = cycleStart;
- Highlights.markArray(3, pos);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, pos);
for (int i = cycleStart + 1; i < length; i++) {
- Highlights.markArray(2, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, i);
Delays.sleep(0.01);
if (Reads.compare(array[i], val) == -1) {
pos++;
- Highlights.markArray(1, pos);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, pos);
Delays.sleep(0.01);
}
}
while (val == array[pos]) {
pos++;
- Highlights.markArray(1, pos);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, pos);
}
tmp = array[pos];
diff --git a/src/sorts/DoubleSelectionSort.java b/src/main/java/sorts/DoubleSelectionSort.java
similarity index 86%
rename from src/sorts/DoubleSelectionSort.java
rename to src/main/java/sorts/DoubleSelectionSort.java
index 40cc772d..1ad44a41 100644
--- a/src/sorts/DoubleSelectionSort.java
+++ b/src/main/java/sorts/DoubleSelectionSort.java
@@ -1,10 +1,9 @@
package sorts;
import templates.Sort;
-import utils.Delays;
-import utils.Highlights;
-import utils.Reads;
-import utils.Writes;
+import utils.*;
+
+import java.awt.*;
/*
*
@@ -57,16 +56,16 @@ public void runSort(int[] array, int length, int bucketCount) {
while(left <= right) {
for(int i = left; i <= right; i++) {
- Highlights.markArray(3, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, i);
if(Reads.compare(array[i], array[biggest]) == 1) {
biggest = i;
- Highlights.markArray(1, biggest);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, biggest);
Delays.sleep(0.01);
}
if(Reads.compare(array[i], array[smallest]) == -1) {
smallest = i;
- Highlights.markArray(2, smallest);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, smallest);
Delays.sleep(0.01);
}
@@ -77,7 +76,9 @@ public void runSort(int[] array, int length, int bucketCount) {
Writes.swap(array, left, smallest, 0.02, true, false);
Writes.swap(array, right, biggest, 0.02, true, false);
-
+ Highlights.markArray(left, left, Color.GREEN, Mark.TYPE_SORTED);
+ Highlights.markArray(right, right, Color.GREEN, Mark.TYPE_SORTED);
+
left++;
right--;
diff --git a/src/sorts/DualPivotQuickSort.java b/src/main/java/sorts/DualPivotQuickSort.java
similarity index 88%
rename from src/sorts/DualPivotQuickSort.java
rename to src/main/java/sorts/DualPivotQuickSort.java
index 8d930fce..18b5bf93 100644
--- a/src/sorts/DualPivotQuickSort.java
+++ b/src/main/java/sorts/DualPivotQuickSort.java
@@ -48,12 +48,12 @@ private void dualPivot(int[] a, int left, int right) {
Highlights.clearMark(2);
l++;
- Highlights.markArray(4, l);
+ Highlights.markArray(Highlights.getMaximumLength() + 4, l);
}
else if (Reads.compare(a[k], q) >= 0) {
while (Reads.compare(a[g], q) == 1 && k < g) {
g--;
- Highlights.markArray(3, g);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, g);
Delays.sleep(0.2);
}
@@ -61,18 +61,18 @@ else if (Reads.compare(a[k], q) >= 0) {
Highlights.clearMark(2);
g--;
- Highlights.markArray(3, g);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, g);
if (Reads.compare(a[k], p) == -1) {
Writes.swap(a, k, l, 0.2, true, false);
Highlights.clearMark(2);
++l;
- Highlights.markArray(4, l);
+ Highlights.markArray(Highlights.getMaximumLength() + 4, l);
}
}
++k;
- Highlights.markArray(1, k);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, k);
Delays.sleep(0.2);
}
diff --git a/src/sorts/ExchangeBogoSort.java b/src/main/java/sorts/ExchangeBogoSort.java
similarity index 90%
rename from src/sorts/ExchangeBogoSort.java
rename to src/main/java/sorts/ExchangeBogoSort.java
index d5453ba3..9c8c5b2d 100644
--- a/src/sorts/ExchangeBogoSort.java
+++ b/src/main/java/sorts/ExchangeBogoSort.java
@@ -28,8 +28,8 @@ public void runSort(int[] array, int currentLen, int bucketCount) {
int index1 = (int) (Math.random() * currentLen),
index2 = (int) (Math.random() * currentLen);
- Highlights.markArray(1, index1);
- Highlights.markArray(2, index2);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, index1);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, index2);
if(index1 < index2) {
if(Reads.compare(array[index1], array[index2]) == 1){
diff --git a/src/sorts/FlashSort.java b/src/main/java/sorts/FlashSort.java
similarity index 97%
rename from src/sorts/FlashSort.java
rename to src/main/java/sorts/FlashSort.java
index 9b2bd387..8554b5b8 100644
--- a/src/sorts/FlashSort.java
+++ b/src/main/java/sorts/FlashSort.java
@@ -73,7 +73,7 @@ public void runSort(int[] array, int length, int bucketCount) {
int big;
int bigIndex;
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
//which is bigger A(i) or A(i+1)
if(Reads.compare(array[i], array[i + 1]) == -1)
@@ -104,7 +104,7 @@ public void runSort(int[] array, int length, int bucketCount) {
}
//do the last element
- Highlights.markArray(1, length - 1);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, length - 1);
if(Reads.compare(array[length - 1], min) == -1)
{
min = array[length - 1];
@@ -152,7 +152,7 @@ else if(Reads.compare(array[length - 1], max) == 1)
for(int h = 0; h < length; h++)
{
- Highlights.markArray(1, h);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, h);
//classify the A(i) value
K = ((int)((array[h] - min) * c)) + 1;
@@ -241,7 +241,7 @@ else if(Reads.compare(array[length - 1], max) == 1)
//location with the evicted value
int temp = array[location];
Writes.write(array, location, evicted, 1, false, false);
- Highlights.markArray(1, location);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, location);
evicted = temp;
//decrease the count for this class
diff --git a/src/sorts/GnomeSort.java b/src/main/java/sorts/GnomeSort.java
similarity index 89%
rename from src/sorts/GnomeSort.java
rename to src/main/java/sorts/GnomeSort.java
index 607ff664..ab581c7c 100644
--- a/src/sorts/GnomeSort.java
+++ b/src/main/java/sorts/GnomeSort.java
@@ -31,7 +31,7 @@ public void runSort(int[] array, int length, int bucketCount) {
if (Reads.compare(array[i], array[i-1]) >= 0)
{
i++;
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
Delays.sleep(0.02);
}
else
@@ -42,7 +42,7 @@ public void runSort(int[] array, int length, int bucketCount) {
if (i > 1) {
i--;
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
Delays.sleep(0.01);
}
}
diff --git a/src/sorts/GrailSort.java b/src/main/java/sorts/GrailSort.java
similarity index 100%
rename from src/sorts/GrailSort.java
rename to src/main/java/sorts/GrailSort.java
diff --git a/src/sorts/GravitySort.java b/src/main/java/sorts/GravitySort.java
similarity index 97%
rename from src/sorts/GravitySort.java
rename to src/main/java/sorts/GravitySort.java
index b2019dd3..c50ecbe5 100644
--- a/src/sorts/GravitySort.java
+++ b/src/main/java/sorts/GravitySort.java
@@ -85,7 +85,7 @@ public void runSort(int[] array, int length, int bucketCount) {
Writes.write(array, x, count, 0.002, true, false);
}
- Highlights.markArray(2, length - i - 1);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, length - i - 1);
Delays.sleep(0.001);
}
}
diff --git a/src/sorts/HolyGrailSort.java b/src/main/java/sorts/HolyGrailSort.java
similarity index 97%
rename from src/sorts/HolyGrailSort.java
rename to src/main/java/sorts/HolyGrailSort.java
index 3d63c343..48c3ba93 100644
--- a/src/sorts/HolyGrailSort.java
+++ b/src/main/java/sorts/HolyGrailSort.java
@@ -74,9 +74,9 @@ final public class HolyGrailSort extends HolyGrailSorting {
public HolyGrailSort(Delays delayOps, Highlights markOps, Reads readOps, Writes writeOps) {
super(delayOps, markOps, readOps, writeOps);
- this.setSortPromptID(""); // Sort disabled
+ this.setSortPromptID("Holy Grail"); // Sort disabled
this.setRunAllID("Holy Grail Sort (Block Merge Sort)");
- this.setReportSortID("Holygrailsort");
+ this.setReportSortID("Holy Grail Sort");
this.setCategory("Hybrid Sorts");
this.isComparisonBased(true);
this.isBucketSort(false);
diff --git a/src/sorts/HybridCombSort.java b/src/main/java/sorts/HybridCombSort.java
similarity index 100%
rename from src/sorts/HybridCombSort.java
rename to src/main/java/sorts/HybridCombSort.java
diff --git a/src/sorts/InPlaceLSDRadixSort.java b/src/main/java/sorts/InPlaceLSDRadixSort.java
similarity index 100%
rename from src/sorts/InPlaceLSDRadixSort.java
rename to src/main/java/sorts/InPlaceLSDRadixSort.java
diff --git a/src/sorts/InPlaceMergeSort.java b/src/main/java/sorts/InPlaceMergeSort.java
similarity index 100%
rename from src/sorts/InPlaceMergeSort.java
rename to src/main/java/sorts/InPlaceMergeSort.java
diff --git a/src/sorts/InsertionSort.java b/src/main/java/sorts/InsertionSort.java
similarity index 100%
rename from src/sorts/InsertionSort.java
rename to src/main/java/sorts/InsertionSort.java
diff --git a/src/sorts/IntroCircleSort.java b/src/main/java/sorts/IntroCircleSort.java
similarity index 100%
rename from src/sorts/IntroCircleSort.java
rename to src/main/java/sorts/IntroCircleSort.java
diff --git a/src/sorts/IntroSort.java b/src/main/java/sorts/IntroSort.java
similarity index 88%
rename from src/sorts/IntroSort.java
rename to src/main/java/sorts/IntroSort.java
index 0224a2f1..ed887739 100644
--- a/src/sorts/IntroSort.java
+++ b/src/main/java/sorts/IntroSort.java
@@ -47,7 +47,7 @@ private int medianof3(int[] arr, int left, int mid, int right) {
Writes.swap(arr, right, mid, 1, true, false);
}
middle = mid;
- Highlights.markArray(3, mid);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, mid);
return arr[mid];
}
@@ -55,7 +55,7 @@ private int partition(int[] a, int lo, int hi, int x) {
int i = lo, j = hi;
while (true) {
while (Reads.compare(a[i], x) == -1) {
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
Delays.sleep(0.5);
i++;
}
@@ -63,23 +63,23 @@ private int partition(int[] a, int lo, int hi, int x) {
j--;
while (Reads.compare(x, a[j]) == -1) {
- Highlights.markArray(2, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, j);
Delays.sleep(0.5);
j--;
}
if(!(i < j)) {
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
Delays.sleep(0.5);
return i;
}
// Follow the pivot and highlight it.
if(i == middle) {
- Highlights.markArray(3, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, j);
}
if(j == middle) {
- Highlights.markArray(3, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, i);
}
Writes.swap(a, i, j, 1, true, false);
diff --git a/src/sorts/IterativeBitonicSort.java b/src/main/java/sorts/IterativeBitonicSort.java
similarity index 100%
rename from src/sorts/IterativeBitonicSort.java
rename to src/main/java/sorts/IterativeBitonicSort.java
diff --git a/src/sorts/IterativeOddEvenMergeSort.java b/src/main/java/sorts/IterativeOddEvenMergeSort.java
similarity index 90%
rename from src/sorts/IterativeOddEvenMergeSort.java
rename to src/main/java/sorts/IterativeOddEvenMergeSort.java
index ee2443ae..8efd68d5 100644
--- a/src/sorts/IterativeOddEvenMergeSort.java
+++ b/src/main/java/sorts/IterativeOddEvenMergeSort.java
@@ -34,8 +34,8 @@ public void runSort(int[] array, int currentLength, int bucketCount) {
for (int j = k % p; j + k < currentLength; j += k + k)
for (int i = 0; i < k; i++)
if ((i + j)/(p + p) == (i + j + k)/(p + p)) {
- Highlights.markArray(1, i + j);
- Highlights.markArray(2, i + j + k);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i + j);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, i + j + k);
Delays.sleep(1);
if(Reads.compare(array[i + j], array[i + j + k]) > 0)
Writes.swap(array, i + j, i + j + k, 1, true, false);
diff --git a/src/sorts/IterativePairwiseSort.java b/src/main/java/sorts/IterativePairwiseSort.java
similarity index 91%
rename from src/sorts/IterativePairwiseSort.java
rename to src/main/java/sorts/IterativePairwiseSort.java
index 0255cd0b..5dfb1d1f 100644
--- a/src/sorts/IterativePairwiseSort.java
+++ b/src/main/java/sorts/IterativePairwiseSort.java
@@ -55,8 +55,8 @@ private void iterativepairwise(int[] array, int length, double sleep) {
c = 0;
while (b < length){
Delays.sleep(sleep);
- Highlights.markArray(1, b - a);
- Highlights.markArray(2, b);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, b - a);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, b);
if(Reads.compare(array[b - a], array[b]) == 1) {
Writes.swap(array, b - a, b, sleep, true, false);
}
@@ -77,8 +77,8 @@ private void iterativepairwise(int[] array, int length, double sleep) {
c = 0;
while (b < length){
Delays.sleep(sleep);
- Highlights.markArray(1, b - (d * a));
- Highlights.markArray(2, b);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, b - (d * a));
+ Highlights.markArray(Highlights.getMaximumLength() + 2, b);
if(Reads.compare(array[b - (d * a)], array[b]) == 1) {
Writes.swap(array, b - (d * a), b, sleep, true, false);
}
diff --git a/src/sorts/LLQuickSort.java b/src/main/java/sorts/LLQuickSort.java
similarity index 97%
rename from src/sorts/LLQuickSort.java
rename to src/main/java/sorts/LLQuickSort.java
index 7d18b5dd..13b9190b 100644
--- a/src/sorts/LLQuickSort.java
+++ b/src/main/java/sorts/LLQuickSort.java
@@ -31,6 +31,7 @@ private int partition(int[] array, int lo, int hi) {
Writes.swap(array, i, j, 1, true, false);
i++;
}
+ Delays.sleep(0.025);
}
Writes.swap(array, i, hi, 1, true, false);
return i;
diff --git a/src/sorts/LRQuickSort.java b/src/main/java/sorts/LRQuickSort.java
similarity index 83%
rename from src/sorts/LRQuickSort.java
rename to src/main/java/sorts/LRQuickSort.java
index e88bb428..82275688 100644
--- a/src/sorts/LRQuickSort.java
+++ b/src/main/java/sorts/LRQuickSort.java
@@ -30,27 +30,27 @@ private void quickSort(int[] a, int p, int r) {
int i = p;
int j = r;
- Highlights.markArray(3, pivot);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, pivot);
while (i <= j) {
while (Reads.compare(a[i], x) == -1){
i++;
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
Delays.sleep(0.5);
}
while (Reads.compare(a[j], x) == 1){
j--;
- Highlights.markArray(2, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, j);
Delays.sleep(0.5);
}
if (i <= j) {
// Follow the pivot and highlight it.
if(i == pivot) {
- Highlights.markArray(3, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, j);
}
if(j == pivot) {
- Highlights.markArray(3, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, i);
}
Writes.swap(a, i, j, 1, true, false);
diff --git a/src/sorts/LSDRadixSort.java b/src/main/java/sorts/LSDRadixSort.java
similarity index 97%
rename from src/sorts/LSDRadixSort.java
rename to src/main/java/sorts/LSDRadixSort.java
index 547aca11..a5b80112 100644
--- a/src/sorts/LSDRadixSort.java
+++ b/src/main/java/sorts/LSDRadixSort.java
@@ -62,7 +62,7 @@ public void runSort(int[] array, int length, int bucketCount) {
for(int p = 0; p <= highestpower; p++){
for(int i = 0; i < length; i++){
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
int digit = Reads.getDigit(array[i], p, bucketCount);
registers[digit].add(array[i]);
diff --git a/src/sorts/LazyStableSort.java b/src/main/java/sorts/LazyStableSort.java
similarity index 100%
rename from src/sorts/LazyStableSort.java
rename to src/main/java/sorts/LazyStableSort.java
diff --git a/src/sorts/LessBogoSort.java b/src/main/java/sorts/LessBogoSort.java
similarity index 93%
rename from src/sorts/LessBogoSort.java
rename to src/main/java/sorts/LessBogoSort.java
index bca26dad..31585718 100644
--- a/src/sorts/LessBogoSort.java
+++ b/src/main/java/sorts/LessBogoSort.java
@@ -30,7 +30,7 @@ public void runSort(int[] array, int currentLen, int bucketCount) {
while(!this.isMinSorted(array, currentLen, iterator)) {
this.bogoSwap(array, currentLen, iterator);
}
- Highlights.markArray(1, iterator);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, iterator);
iterator++;
}
}
diff --git a/src/sorts/MSDRadixSort.java b/src/main/java/sorts/MSDRadixSort.java
similarity index 94%
rename from src/sorts/MSDRadixSort.java
rename to src/main/java/sorts/MSDRadixSort.java
index daa53138..dcad58a1 100644
--- a/src/sorts/MSDRadixSort.java
+++ b/src/main/java/sorts/MSDRadixSort.java
@@ -54,8 +54,8 @@ private void radixMSD(int[] array, int length, int min, int max, int radix, int
if(min >= max || pow < 0)
return;
- Highlights.markArray(2, max - 1);
- Highlights.markArray(3, min);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, max - 1);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, min);
@SuppressWarnings("unchecked")
ArrayList[] registers = new ArrayList[radix];
@@ -64,7 +64,7 @@ private void radixMSD(int[] array, int length, int min, int max, int radix, int
registers[i] = new ArrayList<>();
for(int i = min; i < max; i++) {
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
int digit = Reads.getDigit(array[i], pow, radix);
registers[digit].add(array[i]);
diff --git a/src/sorts/MaxHeapSort.java b/src/main/java/sorts/MaxHeapSort.java
similarity index 100%
rename from src/sorts/MaxHeapSort.java
rename to src/main/java/sorts/MaxHeapSort.java
diff --git a/src/sorts/MergeSort.java b/src/main/java/sorts/MergeSort.java
similarity index 100%
rename from src/sorts/MergeSort.java
rename to src/main/java/sorts/MergeSort.java
diff --git a/src/sorts/MinHeapSort.java b/src/main/java/sorts/MinHeapSort.java
similarity index 100%
rename from src/sorts/MinHeapSort.java
rename to src/main/java/sorts/MinHeapSort.java
diff --git a/src/sorts/OddEvenMergeSort.java b/src/main/java/sorts/OddEvenMergeSort.java
similarity index 87%
rename from src/sorts/OddEvenMergeSort.java
rename to src/main/java/sorts/OddEvenMergeSort.java
index 1fec0c98..047c6710 100644
--- a/src/sorts/OddEvenMergeSort.java
+++ b/src/main/java/sorts/OddEvenMergeSort.java
@@ -43,14 +43,14 @@ private void oddEvenMerge(int[] array, int lo, int n, int r) {
this.oddEvenMerge(array, lo+r, n, m); // odd subsequence
for (int i = lo + r; i + r < lo + n; i += m) {
- Highlights.markArray(1, i);
- Highlights.markArray(2, i + r);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, i + r);
this.oddEvenMergeCompare(array, i, i + r);
}
}
else {
- Highlights.markArray(1, lo + r);
- Highlights.markArray(2, lo);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, lo + r);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, lo);
this.oddEvenMergeCompare(array, lo, lo+r);
}
}
diff --git a/src/sorts/OddEvenSort.java b/src/main/java/sorts/OddEvenSort.java
similarity index 91%
rename from src/sorts/OddEvenSort.java
rename to src/main/java/sorts/OddEvenSort.java
index 3ee15457..548e8c1e 100644
--- a/src/sorts/OddEvenSort.java
+++ b/src/main/java/sorts/OddEvenSort.java
@@ -40,7 +40,7 @@ public void runSort(int[] array, int length, int bucketCount) {
sorted = false;
}
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
Delays.sleep(0.025);
}
@@ -50,7 +50,7 @@ public void runSort(int[] array, int length, int bucketCount) {
sorted = false;
}
- Highlights.markArray(2, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, i);
Delays.sleep(0.025);
}
}
diff --git a/src/sorts/OptimizedDualPivotQuickSort.java b/src/main/java/sorts/OptimizedDualPivotQuickSort.java
similarity index 100%
rename from src/sorts/OptimizedDualPivotQuickSort.java
rename to src/main/java/sorts/OptimizedDualPivotQuickSort.java
diff --git a/src/main/java/sorts/OptimizedSlowSort.java b/src/main/java/sorts/OptimizedSlowSort.java
new file mode 100644
index 00000000..eb4d2cd4
--- /dev/null
+++ b/src/main/java/sorts/OptimizedSlowSort.java
@@ -0,0 +1,52 @@
+package sorts;
+
+import templates.Sort;
+import utils.*;
+
+import java.awt.*;
+/*
+DO Time: Not Tested
+AddMarks: Working
+ */
+// Code refactored from Python: http://wiki.c2.com/?SlowSort
+
+final public class OptimizedSlowSort extends Sort {
+ public OptimizedSlowSort(Delays delayOps, Highlights markOps, Reads readOps, Writes writeOps) {
+ super(delayOps, markOps, readOps, writeOps);
+
+ this.setSortPromptID("Optimized Slow");
+ this.setRunAllID("Optimized Slow Sort");
+ this.setReportSortID("Optimized SlowSort");
+ this.setCategory("Exchange Sorts");
+ this.isComparisonBased(true);
+ this.isBucketSort(false);
+ this.isRadixSort(false);
+ this.isUnreasonablySlow(true);
+ this.setUnreasonableLimit(512);
+ this.isBogoSort(false);
+ }
+
+
+
+ private void optslowsort(int[] A, int i, int j) {
+
+ if (j <= 1) return;
+
+ optslowsort(A,i + 1, j - 1);
+
+ if (Reads.compare(A[i], A[i+1]) == 1)
+ {
+ Delays.sleep(0.025);
+ Writes.swap(A, i, i + 1, 1, true, false);
+
+ optslowsort(A, i + 1, j);
+ }
+
+ }
+
+
+ @Override
+ public void runSort(int[] array, int currentLength, int bucketCount) {
+ this.optslowsort(array, 0, currentLength - 1);
+ }
+}
\ No newline at end of file
diff --git a/src/sorts/PancakeSort.java b/src/main/java/sorts/PancakeSort.java
similarity index 91%
rename from src/sorts/PancakeSort.java
rename to src/main/java/sorts/PancakeSort.java
index b63a9b59..65ba2e87 100644
--- a/src/sorts/PancakeSort.java
+++ b/src/main/java/sorts/PancakeSort.java
@@ -33,7 +33,7 @@ public PancakeSort(Delays delayOps, Highlights markOps, Reads readOps, Writes wr
private boolean sorted(int[] array, int length) {
for(int i = 0; i < length - 1; i++) {
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
Delays.sleep(0.025);
if(Reads.compare(array[i], array[i + 1]) > 0) return false;
@@ -44,7 +44,7 @@ private boolean sorted(int[] array, int length) {
private int findMax(int[] arr, int end) {
int index = 0, max = Integer.MIN_VALUE;
for (int i = 0; i <= end; i++) {
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
if (Reads.compare(arr[i], max) == 1) {
max = arr[i];
@@ -61,7 +61,7 @@ private int findMax(int[] arr, int end) {
public void runSort(int[] array, int length, int bucketCount) {
for (int i = length - 1; i >= 0; i--) {
if(!this.sorted(array, i)) {
- if(i + 1 != length) Highlights.markArray(3, i + 1);
+ if(i + 1 != length) Highlights.markArray(Highlights.getMaximumLength() + 3, i + 1);
int index = this.findMax(array, i);
if(index == 0) {
diff --git a/src/sorts/PatienceSort.java b/src/main/java/sorts/PatienceSort.java
similarity index 92%
rename from src/sorts/PatienceSort.java
rename to src/main/java/sorts/PatienceSort.java
index 908df65c..c5e7b842 100644
--- a/src/sorts/PatienceSort.java
+++ b/src/main/java/sorts/PatienceSort.java
@@ -57,7 +57,7 @@ private void binarySearch(ArrayList list, Pile find) {
int change = list.size() / 4;
while(list.get(at).compare(find) != 0 && change > 0){
- Highlights.markArray(1, at);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, at);
Delays.sleep(0.5);
if(list.get(at).compare(find) < 0)
@@ -68,7 +68,7 @@ private void binarySearch(ArrayList list, Pile find) {
change /= 2;
}
- Highlights.markArray(1, at);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, at);
Delays.sleep(0.5);
}
@@ -80,7 +80,7 @@ public void runSort(int[] array, int length, int bucketCount) {
for (int x = 0; x < length; x++) {
Pile newPile = new Pile();
- Highlights.markArray(2, x);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, x);
Writes.mockWrite(length, newPile.size(), array[x], 1);
newPile.push(array[x]);
@@ -112,7 +112,7 @@ public void runSort(int[] array, int length, int bucketCount) {
Writes.mockWrite(length, smallPile.size(), 0, 0);
Writes.write(array, c, smallPile.pop(), 1, false, false);
- Highlights.markArray(1, c);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, c);
if (!smallPile.isEmpty()) {
Writes.mockWrite(length, heap.size(), smallPile.get(0), 0);
diff --git a/src/sorts/PigeonholeSort.java b/src/main/java/sorts/PigeonholeSort.java
similarity index 94%
rename from src/sorts/PigeonholeSort.java
rename to src/main/java/sorts/PigeonholeSort.java
index 8fc85d10..83fc352e 100644
--- a/src/sorts/PigeonholeSort.java
+++ b/src/main/java/sorts/PigeonholeSort.java
@@ -54,7 +54,7 @@ public void runSort(int[] array, int length, int bucketCount) {
for(int x = 0; x < length; x++) {
Writes.write(holes, array[x] - mi, holes[array[x] - mi] + 1, 1, false, true);
- Highlights.markArray(1, x);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, x);
}
int j = 0;
@@ -64,7 +64,7 @@ public void runSort(int[] array, int length, int bucketCount) {
Writes.write(holes, count, holes[count] - 1, 0, false, true);
Writes.write(array, j, count + mi, 1, false, false);
- Highlights.markArray(1, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, j);
j++;
}
}
diff --git a/src/sorts/PoplarHeapSort.java b/src/main/java/sorts/PoplarHeapSort.java
similarity index 100%
rename from src/sorts/PoplarHeapSort.java
rename to src/main/java/sorts/PoplarHeapSort.java
diff --git a/src/sorts/RecursiveBinaryQuickSort.java b/src/main/java/sorts/RecursiveBinaryQuickSort.java
similarity index 100%
rename from src/sorts/RecursiveBinaryQuickSort.java
rename to src/main/java/sorts/RecursiveBinaryQuickSort.java
diff --git a/src/sorts/RecursiveBitonicSort.java b/src/main/java/sorts/RecursiveBitonicSort.java
similarity index 94%
rename from src/sorts/RecursiveBitonicSort.java
rename to src/main/java/sorts/RecursiveBitonicSort.java
index dd811f72..768d2565 100644
--- a/src/sorts/RecursiveBitonicSort.java
+++ b/src/main/java/sorts/RecursiveBitonicSort.java
@@ -39,8 +39,8 @@ private static int greatestPowerOfTwoLessThan(int n){
private void compare(int[] A, int i, int j, boolean dir)
{
- Highlights.markArray(1, i);
- Highlights.markArray(2, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, j);
Delays.sleep(0.5);
diff --git a/src/sorts/RecursiveCombSort.java b/src/main/java/sorts/RecursiveCombSort.java
similarity index 96%
rename from src/sorts/RecursiveCombSort.java
rename to src/main/java/sorts/RecursiveCombSort.java
index 876e9470..a5ec1fff 100644
--- a/src/sorts/RecursiveCombSort.java
+++ b/src/main/java/sorts/RecursiveCombSort.java
@@ -82,8 +82,8 @@ private void finishrecucomb(int[] array, int start, int end, int gap, double sle
}
for (int i = start; i < (end - gap); i += gap){
Delays.sleep(sleep);
- Highlights.markArray(1, i);
- Highlights.markArray(2, i + gap);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, i + gap);
if(Reads.compare(array[i], array[i + gap]) == 1) {
Writes.swap(array, i, i + gap, sleep, true, false);
}
diff --git a/src/sorts/RecursiveOddEvenMergeSort.java b/src/main/java/sorts/RecursiveOddEvenMergeSort.java
similarity index 83%
rename from src/sorts/RecursiveOddEvenMergeSort.java
rename to src/main/java/sorts/RecursiveOddEvenMergeSort.java
index 1da743f8..1251a897 100644
--- a/src/sorts/RecursiveOddEvenMergeSort.java
+++ b/src/main/java/sorts/RecursiveOddEvenMergeSort.java
@@ -28,8 +28,8 @@ public RecursiveOddEvenMergeSort(Delays delayOps, Highlights markOps, Reads read
}
private void oddEvenMergeCompare(int[] array, int i, int j) {
- Highlights.markArray(1, i);
- Highlights.markArray(2, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, j);
Delays.sleep(1);
if (Reads.compare(array[i], array[j]) > 0)
Writes.swap(array, i, j, 1, true, false);
@@ -46,14 +46,14 @@ private void oddEvenMerge(int[] array, int lo, int n, int r) {
this.oddEvenMerge(array, lo+r, n, m); // odd subsequence
for (int i = lo + r; i + r < lo + n; i += m) {
- Highlights.markArray(1, i);
- Highlights.markArray(2, i + r);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, i + r);
this.oddEvenMergeCompare(array, i, i + r);
}
}
else {
- Highlights.markArray(1, lo + r);
- Highlights.markArray(2, lo);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, lo + r);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, lo);
this.oddEvenMergeCompare(array, lo, lo+r);
}
}
diff --git a/src/sorts/RecursivePairwiseSort.java b/src/main/java/sorts/RecursivePairwiseSort.java
similarity index 91%
rename from src/sorts/RecursivePairwiseSort.java
rename to src/main/java/sorts/RecursivePairwiseSort.java
index 4bbd00bb..e3d19f37 100644
--- a/src/sorts/RecursivePairwiseSort.java
+++ b/src/main/java/sorts/RecursivePairwiseSort.java
@@ -51,8 +51,8 @@ private void pairwiserecursive(int[] array, int start, int end, int gap, double
int b = start + gap;
while (b < end){
Delays.sleep(sleep);
- Highlights.markArray(1, b - gap);
- Highlights.markArray(2, b);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, b - gap);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, b);
if(Reads.compare(array[b - gap], array[b]) == 1) {
Writes.swap(array, b - gap, b, sleep, true, false);
}
@@ -77,8 +77,8 @@ private void pairwiserecursive(int[] array, int start, int end, int gap, double
c /= 2;
if (b + (c * gap) < end){
Delays.sleep(sleep);
- Highlights.markArray(1, b);
- Highlights.markArray(2, b + (c * gap));
+ Highlights.markArray(Highlights.getMaximumLength() + 1, b);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, b + (c * gap));
if(Reads.compare(array[b], array[b + (c * gap)]) == 1) {
Writes.swap(array, b, b + (c * gap), sleep, true, false);
}
diff --git a/src/sorts/RotateMergeSort.java b/src/main/java/sorts/RotateMergeSort.java
similarity index 100%
rename from src/sorts/RotateMergeSort.java
rename to src/main/java/sorts/RotateMergeSort.java
diff --git a/src/sorts/SelectionSort.java b/src/main/java/sorts/SelectionSort.java
similarity index 87%
rename from src/sorts/SelectionSort.java
rename to src/main/java/sorts/SelectionSort.java
index 3f418ddc..713138b1 100644
--- a/src/sorts/SelectionSort.java
+++ b/src/main/java/sorts/SelectionSort.java
@@ -1,10 +1,14 @@
package sorts;
import templates.Sort;
-import utils.Delays;
-import utils.Highlights;
-import utils.Reads;
-import utils.Writes;
+import utils.*;
+
+import java.awt.*;
+
+/*
+DO Time: Not Tested
+AddMarks: Working
+ */
/*
*
@@ -54,16 +58,17 @@ public void runSort(int[] array, int length, int bucketCount) {
int lowestindex = i;
for (int j = i + 1; j < length; j++) {
- Highlights.markArray(2, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, j);
Delays.sleep(0.01);
if (Reads.compare(array[j], array[lowestindex]) == -1){
lowestindex = j;
- Highlights.markArray(1, lowestindex);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, lowestindex);
Delays.sleep(0.01);
}
}
Writes.swap(array, i, lowestindex, 0.02, true, false);
+ Highlights.markArray(i, i, Color.GREEN, Mark.TYPE_SORTED);
}
}
}
\ No newline at end of file
diff --git a/src/sorts/ShatterSort.java b/src/main/java/sorts/ShatterSort.java
similarity index 100%
rename from src/sorts/ShatterSort.java
rename to src/main/java/sorts/ShatterSort.java
diff --git a/src/sorts/ShellSort.java b/src/main/java/sorts/ShellSort.java
similarity index 100%
rename from src/sorts/ShellSort.java
rename to src/main/java/sorts/ShellSort.java
diff --git a/src/sorts/SillySort.java b/src/main/java/sorts/SillySort.java
similarity index 89%
rename from src/sorts/SillySort.java
rename to src/main/java/sorts/SillySort.java
index 70f1201d..7256d9da 100644
--- a/src/sorts/SillySort.java
+++ b/src/main/java/sorts/SillySort.java
@@ -32,7 +32,7 @@ private void sillySort(int[] array, int i, int j) {
/* find the middle of the array */
m = i + ((j - i) / 2);
- Highlights.markArray(3, m);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, m);
/*
* use this function (recursively) to find put the minimum elements of
@@ -49,8 +49,8 @@ private void sillySort(int[] array, int i, int j) {
Writes.swap(array, i, m + 1, 1, true, false);
}
- Highlights.markArray(1, i);
- Highlights.markArray(2, m + 1);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, m + 1);
this.sillySort(array, i + 1, j);
}
diff --git a/src/sorts/SimpleShatterSort.java b/src/main/java/sorts/SimpleShatterSort.java
similarity index 100%
rename from src/sorts/SimpleShatterSort.java
rename to src/main/java/sorts/SimpleShatterSort.java
diff --git a/src/sorts/SkaSort.java b/src/main/java/sorts/SkaSort.java
similarity index 100%
rename from src/sorts/SkaSort.java
rename to src/main/java/sorts/SkaSort.java
diff --git a/src/sorts/SlowSort.java b/src/main/java/sorts/SlowSort.java
similarity index 66%
rename from src/sorts/SlowSort.java
rename to src/main/java/sorts/SlowSort.java
index 96ad2297..66eec877 100644
--- a/src/sorts/SlowSort.java
+++ b/src/main/java/sorts/SlowSort.java
@@ -1,11 +1,13 @@
package sorts;
import templates.Sort;
-import utils.Delays;
-import utils.Highlights;
-import utils.Reads;
-import utils.Writes;
+import utils.*;
+import java.awt.*;
+/*
+DO Time: Not Tested
+AddMarks: Working
+ */
// Code refactored from Python: http://wiki.c2.com/?SlowSort
final public class SlowSort extends Sort {
@@ -24,26 +26,31 @@ public SlowSort(Delays delayOps, Highlights markOps, Reads readOps, Writes write
this.isBogoSort(false);
}
- private void slowSort(int[] A, int i, int j) {
+ private void slowSort(int[] A, int i, int j) {
if (i >= j) {
return;
}
int m = i + ((j - i) / 2);
-
- Highlights.markArray(3, m);
-
+
+ Highlights.markArray(Highlights.getMaximumLength() + 1, m);
+
this.slowSort(A, i, m);
this.slowSort(A, m + 1, j);
-
+ Delays.sleep(0.025);
+
if (Reads.compare(A[m], A[j]) == 1) {
Writes.swap(A, m, j, 1, true, false);
}
-
- Highlights.markArray(1, j);
- Highlights.markArray(2, m);
-
+
+ Highlights.markArray(j, j, Color.GREEN, Mark.TYPE_SORTED);
+ Highlights.markArray(j-1, j-1, Color.GREEN, Mark.TYPE_SORTED);
+
+
+ Highlights.markArray(Highlights.getMaximumLength() + 1, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, m);
this.slowSort(A, i, j - 1);
+ Highlights.clearMarks(i, j, Mark.TYPE_SORTED);
}
@Override
diff --git a/src/sorts/SmartBubbleSort.java b/src/main/java/sorts/SmartBubbleSort.java
similarity index 86%
rename from src/sorts/SmartBubbleSort.java
rename to src/main/java/sorts/SmartBubbleSort.java
index d097f0ec..1f4c96b2 100644
--- a/src/sorts/SmartBubbleSort.java
+++ b/src/main/java/sorts/SmartBubbleSort.java
@@ -1,10 +1,14 @@
package sorts;
import templates.Sort;
-import utils.Delays;
-import utils.Highlights;
-import utils.Reads;
-import utils.Writes;
+import utils.*;
+import utils.Mark;
+import java.awt.*;
+
+/*
+DO Time: Not Tested
+AddMarks: Working
+ */
/*
*
@@ -56,10 +60,11 @@ public void runSort(int[] array, int length, int bucketCount) {
Writes.swap(array, j, j + 1, 0.075, true, false);
}
- Highlights.markArray(1, j);
- Highlights.markArray(2, j + 1);
+ Highlights.markArray(Highlights.getMaximumLength()+1, j);
+ Highlights.markArray(Highlights.getMaximumLength()+2, j + 1);
Delays.sleep(0.025);
}
+ Highlights.markArray(i, i, Color.GREEN, Mark.TYPE_SORTED);
}
}
}
\ No newline at end of file
diff --git a/src/sorts/SmartGnomeSort.java b/src/main/java/sorts/SmartGnomeSort.java
similarity index 100%
rename from src/sorts/SmartGnomeSort.java
rename to src/main/java/sorts/SmartGnomeSort.java
diff --git a/src/sorts/SmoothSort.java b/src/main/java/sorts/SmoothSort.java
similarity index 95%
rename from src/sorts/SmoothSort.java
rename to src/main/java/sorts/SmoothSort.java
index 36206881..12eb4ebd 100644
--- a/src/sorts/SmoothSort.java
+++ b/src/main/java/sorts/SmoothSort.java
@@ -46,8 +46,8 @@ private void sift(int[] A, int pshift, int head)
int rt = head - 1;
int lf = head - 1 - LP[pshift - 2];
- Highlights.markArray(2, rt);
- Highlights.markArray(3, lf);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, rt);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, lf);
Delays.sleep(0.325);
@@ -88,8 +88,8 @@ private void trinkle(int[] A, int p, int pshift, int head, boolean isTrusty)
if (!isTrusty && pshift > 1) {
int rt = head - 1;
int lf = head - 1 - LP[pshift - 2];
- Highlights.markArray(2, rt);
- Highlights.markArray(3, lf);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, rt);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, lf);
Delays.sleep(0.325);
diff --git a/src/sorts/SqrtSort.java b/src/main/java/sorts/SqrtSort.java
similarity index 94%
rename from src/sorts/SqrtSort.java
rename to src/main/java/sorts/SqrtSort.java
index fcdd358d..a5f93825 100644
--- a/src/sorts/SqrtSort.java
+++ b/src/main/java/sorts/SqrtSort.java
@@ -102,8 +102,8 @@ private void sqrtMergeRight(int[] arr, int pos, int leftLen, int rightLen, int d
int left = leftLen - 1;
while(left >= 0) {
- Highlights.markArray(2, pos + left);
- Highlights.markArray(3, pos + right);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, pos + left);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, pos + right);
if(right < leftLen || Reads.compare(arr[pos + left], arr[pos + right]) > 0) {
Writes.write(arr, pos + (mergedPos--), arr[pos + (left--)], 1, true, auxwrite);
@@ -116,7 +116,7 @@ private void sqrtMergeRight(int[] arr, int pos, int leftLen, int rightLen, int d
if(right != mergedPos) {
while(right >= leftLen) {
Writes.write(arr, pos + (mergedPos--), arr[pos + (right--)], 1, true, auxwrite);
- Highlights.markArray(2, pos + right);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, pos + right);
}
}
@@ -136,8 +136,8 @@ private void sqrtMergeLeftWithXBuf(int[] arr, int pos, int leftEnd, int rightEnd
}
else Writes.write(arr, pos + dist++, arr[pos + left++], 1, true, auxwrite);
- Highlights.markArray(2, pos + left);
- Highlights.markArray(3, pos + right);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, pos + left);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, pos + right);
}
Highlights.clearMark(3);
@@ -145,7 +145,7 @@ private void sqrtMergeLeftWithXBuf(int[] arr, int pos, int leftEnd, int rightEnd
if(dist != left) {
while(left < leftEnd) {
Writes.write(arr, pos + dist++, arr[pos + left++], 1, true, auxwrite);
- Highlights.markArray(2, pos + left);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, pos + left);
}
}
@@ -163,8 +163,8 @@ private void sqrtMergeDown(int[] arr, int arrPos, int[] buffer, int bufPos, int
}
else Writes.write(arr, arrPos + dist++, arr[arrPos + arrMerge++], 1, true, auxwrite);
- Highlights.markArray(2, arrPos + arrMerge);
- Highlights.markArray(3, bufPos + bufMerge);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, arrPos + arrMerge);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, bufPos + bufMerge);
}
Highlights.clearMark(3);
@@ -172,7 +172,7 @@ private void sqrtMergeDown(int[] arr, int arrPos, int[] buffer, int bufPos, int
if(dist != arrMerge) {
while(arrMerge < leftLen) {
Writes.write(arr, arrPos + dist++, arr[arrPos + arrMerge++], 1, true, auxwrite);
- Highlights.markArray(2, arrPos + arrMerge);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, arrPos + arrMerge);
}
}
@@ -190,8 +190,8 @@ private SqrtState sqrtSmartMergeWithXBuf(int[] arr, int pos, int leftOverLen, in
}
else Writes.write(arr, pos + dist++, arr[pos + right++], 1, true, auxwrite);
- Highlights.markArray(2, pos + left);
- Highlights.markArray(3, pos + right);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, pos + left);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, pos + right);
}
Highlights.clearMark(3);
@@ -203,7 +203,7 @@ private SqrtState sqrtSmartMergeWithXBuf(int[] arr, int pos, int leftOverLen, in
while(left < leftEnd) {
Writes.write(arr, pos + --rightEnd, arr[pos + --leftEnd], 1, true, auxwrite);
- Highlights.markArray(2, pos + leftEnd);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, pos + leftEnd);
}
}
else {
diff --git a/src/sorts/StableQuickSort.java b/src/main/java/sorts/StableQuickSort.java
similarity index 92%
rename from src/sorts/StableQuickSort.java
rename to src/main/java/sorts/StableQuickSort.java
index 5c83e71a..a136634f 100644
--- a/src/sorts/StableQuickSort.java
+++ b/src/main/java/sorts/StableQuickSort.java
@@ -56,20 +56,20 @@ public StableQuickSort(Delays delayOps, Highlights markOps, Reads readOps, Write
private void copy(ArrayList list, int [] array, int startIndex) {
for (int num : list) {
Writes.write(array, startIndex++, num, 0.25, false, false);
- Highlights.markArray(1, startIndex);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, startIndex);
}
}
/* Partition/Quicksort "Stable Sort" version using O(n) space */
private int stablePartition(int[] array, int start, int end) {
int pivotValue = array[start]; //poor pivot choice
- Highlights.markArray(3, start);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, start);
ArrayList leftList = new ArrayList<>();
ArrayList rightList = new ArrayList<>();
for (int i = start + 1 ; i <= end; i++) {
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
if (Reads.compare(array[i], pivotValue) == -1) {
Writes.mockWrite(end - start, leftList.size(), array[i], 0.25);
@@ -87,7 +87,7 @@ private int stablePartition(int[] array, int start, int end) {
int newPivotIndex = start + leftList.size();
Writes.write(array, newPivotIndex, pivotValue, 0.25, false, false);
- Highlights.markArray(1, newPivotIndex);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, newPivotIndex);
this.copy(rightList, array, newPivotIndex + 1);
diff --git a/src/sorts/StoogeSort.java b/src/main/java/sorts/StoogeSort.java
similarity index 87%
rename from src/sorts/StoogeSort.java
rename to src/main/java/sorts/StoogeSort.java
index c537f9bb..d328d26a 100644
--- a/src/sorts/StoogeSort.java
+++ b/src/main/java/sorts/StoogeSort.java
@@ -40,14 +40,14 @@ private void stoogeSort(int[] A, int i, int j) {
Delays.sleep(0.0025);
- Highlights.markArray(1, i);
- Highlights.markArray(2, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, j);
if (j - i + 1 >= 3) {
int t = (j - i + 1) / 3;
- Highlights.markArray(3, j - t);
- Highlights.markArray(4, i + t);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, j - t);
+ Highlights.markArray(Highlights.getMaximumLength() + 4, i + t);
this.stoogeSort(A, i, j-t);
this.stoogeSort(A, i+t, j);
diff --git a/src/sorts/TernaryHeapSort.java b/src/main/java/sorts/TernaryHeapSort.java
similarity index 100%
rename from src/sorts/TernaryHeapSort.java
rename to src/main/java/sorts/TernaryHeapSort.java
diff --git a/src/sorts/TimSort.java b/src/main/java/sorts/TimSort.java
similarity index 100%
rename from src/sorts/TimSort.java
rename to src/main/java/sorts/TimSort.java
diff --git a/src/sorts/TimeSort.java b/src/main/java/sorts/TimeSort.java
similarity index 100%
rename from src/sorts/TimeSort.java
rename to src/main/java/sorts/TimeSort.java
diff --git a/src/sorts/TournamentSort.java b/src/main/java/sorts/TournamentSort.java
similarity index 96%
rename from src/sorts/TournamentSort.java
rename to src/main/java/sorts/TournamentSort.java
index f4dc0a03..6765f5ff 100644
--- a/src/sorts/TournamentSort.java
+++ b/src/main/java/sorts/TournamentSort.java
@@ -46,8 +46,8 @@ public TournamentSort(Delays delayOps, Highlights markOps, Reads readOps, Writes
}
private int tourneyCompare(int a, int b) {
- Highlights.markArray(2, a);
- Highlights.markArray(3, b);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, a);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, b);
Delays.sleep(1);
@@ -151,7 +151,7 @@ private void sort(int[] arr, int currentLen) {
Integer selected = copy.get(i);
Writes.write(arr, i, selected, 1, false, false);
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
}
}
diff --git a/src/sorts/TreeSort.java b/src/main/java/sorts/TreeSort.java
similarity index 95%
rename from src/sorts/TreeSort.java
rename to src/main/java/sorts/TreeSort.java
index f3ad41bb..dc1f6f9e 100644
--- a/src/sorts/TreeSort.java
+++ b/src/main/java/sorts/TreeSort.java
@@ -64,7 +64,7 @@ public Node(int item)
public Node treeWrite(Node element, int at) {
Node node = new Node(0);
- if(at < length) Highlights.markArray(1, at - 1);
+ if(at < length) Highlights.markArray(Highlights.getMaximumLength() + 1, at - 1);
Writes.changeTempWrites(1);
@@ -126,7 +126,7 @@ void treeins(int arr[], int length)
{
for(int i = 0; i < length; i++)
{
- Highlights.markArray(2, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, i);
insert(arr[i]);
}
Highlights.clearMark(2);
diff --git a/src/sorts/WeakHeapSort.java b/src/main/java/sorts/WeakHeapSort.java
similarity index 100%
rename from src/sorts/WeakHeapSort.java
rename to src/main/java/sorts/WeakHeapSort.java
diff --git a/src/sorts/WeaveMergeSort.java b/src/main/java/sorts/WeaveMergeSort.java
similarity index 97%
rename from src/sorts/WeaveMergeSort.java
rename to src/main/java/sorts/WeaveMergeSort.java
index 974a0740..d77cb01c 100644
--- a/src/sorts/WeaveMergeSort.java
+++ b/src/main/java/sorts/WeaveMergeSort.java
@@ -54,7 +54,7 @@ private void weaveInsert(int[] arr, int start, int end) {
for(int j = start; j < end; j++){
pos = j;
- Highlights.markArray(1, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, j);
Highlights.clearMark(2);
while(pos > start && Reads.compare(arr[pos], arr[pos - 1]) < 1) {
diff --git a/src/sorts/WikiSort.java b/src/main/java/sorts/WikiSort.java
similarity index 100%
rename from src/sorts/WikiSort.java
rename to src/main/java/sorts/WikiSort.java
diff --git a/src/templates/BinaryInsertionSorting.java b/src/main/java/templates/BinaryInsertionSorting.java
similarity index 96%
rename from src/templates/BinaryInsertionSorting.java
rename to src/main/java/templates/BinaryInsertionSorting.java
index 70a110d3..d2a63c75 100644
--- a/src/templates/BinaryInsertionSorting.java
+++ b/src/main/java/templates/BinaryInsertionSorting.java
@@ -43,7 +43,7 @@ protected void binaryInsertSort(int[] array, int start, int end, double compSlee
while (lo < hi) {
int mid = lo + ((hi - lo) / 2); // avoid int overflow!
- Highlights.markArray(2, mid);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, mid);
Delays.sleep(compSleep);
diff --git a/src/templates/BinaryQuickSorting.java b/src/main/java/templates/BinaryQuickSorting.java
similarity index 94%
rename from src/templates/BinaryQuickSorting.java
rename to src/main/java/templates/BinaryQuickSorting.java
index bec3d986..019d972c 100644
--- a/src/templates/BinaryQuickSorting.java
+++ b/src/main/java/templates/BinaryQuickSorting.java
@@ -82,14 +82,14 @@ public int partition(int[] array, int p, int r, int bit)
i++;
while(i < r && !Reads.getBit(array[i], bit)) {
i++;
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
Delays.sleep(0.45);
}
// Right is set
j--;
while(j > p && Reads.getBit(array[j], bit)) {
j--;
- Highlights.markArray(2, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, j);
Delays.sleep(0.45);
}
// If i is less than j, we swap, otherwise we are done
diff --git a/src/templates/BogoSorting.java b/src/main/java/templates/BogoSorting.java
similarity index 84%
rename from src/templates/BogoSorting.java
rename to src/main/java/templates/BogoSorting.java
index 706a3c32..e40d5935 100644
--- a/src/templates/BogoSorting.java
+++ b/src/main/java/templates/BogoSorting.java
@@ -49,7 +49,7 @@ protected void bogoSwap(int[] array, int length, int offset){
protected boolean bogoIsSorted(int[] array, int length){
for(int i = 0; i < length - 1; i++) {
if(Reads.compare(array[i], array[i + 1]) == 1) {
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
return false;
}
}
@@ -60,11 +60,11 @@ protected boolean bogoIsSorted(int[] array, int length){
protected boolean isMinSorted(int[] array, int length, int offset) {
Highlights.clearAllMarks();
- Highlights.markArray(2, offset);
- Highlights.markArray(3, length);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, offset);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, length);
for(int i = offset + 1; i < length; i++) {
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
Delays.sleep(0.075);
if(Reads.compare(array[offset], array[i]) == 1) {
@@ -77,11 +77,11 @@ protected boolean isMinSorted(int[] array, int length, int offset) {
protected boolean isMaxSorted(int[] array, int minIterator, int maxIterator) {
Highlights.clearAllMarks();
- Highlights.markArray(2, minIterator);
- Highlights.markArray(3, maxIterator);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, minIterator);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, maxIterator);
for(int i = maxIterator; i >= minIterator; i--) {
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
Delays.sleep(0.075);
if(Reads.compare(array[maxIterator], array[i]) == -1) {
diff --git a/src/templates/CircleSorting.java b/src/main/java/templates/CircleSorting.java
similarity index 91%
rename from src/templates/CircleSorting.java
rename to src/main/java/templates/CircleSorting.java
index 387662ed..09c79eb4 100644
--- a/src/templates/CircleSorting.java
+++ b/src/main/java/templates/CircleSorting.java
@@ -38,8 +38,8 @@ protected int circleSortRoutine(int[] array, int lo, int hi, int swapCount) {
lo++;
hi--;
- Highlights.markArray(1, lo);
- Highlights.markArray(2, hi);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, lo);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, hi);
Delays.sleep(0.5);
}
diff --git a/src/templates/CombSorting.java b/src/main/java/templates/CombSorting.java
similarity index 95%
rename from src/templates/CombSorting.java
rename to src/main/java/templates/CombSorting.java
index 980331f9..e516ad1d 100644
--- a/src/templates/CombSorting.java
+++ b/src/main/java/templates/CombSorting.java
@@ -93,8 +93,8 @@ protected void combSort(ArrayVisualizer ArrayVisualizer, int[] array, int length
Writes.swap(array, i, i+gap, 0.75, true, false);
swapped = true;
}
- Highlights.markArray(1, i);
- Highlights.markArray(2, i + gap);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, i + gap);
Delays.sleep(0.25);
Highlights.clearMark(1);
diff --git a/src/templates/Frame.java b/src/main/java/templates/Frame.java
similarity index 100%
rename from src/templates/Frame.java
rename to src/main/java/templates/Frame.java
diff --git a/src/templates/GrailSorting.java b/src/main/java/templates/GrailSorting.java
similarity index 96%
rename from src/templates/GrailSorting.java
rename to src/main/java/templates/GrailSorting.java
index ca975090..e1082d1f 100644
--- a/src/templates/GrailSorting.java
+++ b/src/main/java/templates/GrailSorting.java
@@ -126,7 +126,7 @@ private int grailBinSearch(int[] arr, int pos, int len, int keyPos, boolean isLe
right = mid;
} else left = mid;
}
- Highlights.markArray(1, mid);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, mid);
}
return right;
}
@@ -267,8 +267,8 @@ private void grailMergeLeft(int[] arr, int pos, int leftLen, int rightLen, int d
this.grailSwap(arr, pos + (dist++), pos + (right++));
}
else this.grailSwap(arr, pos + (dist++), pos + (left++));
- Highlights.markArray(3, pos + left);
- Highlights.markArray(4, pos + right);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, pos + left);
+ Highlights.markArray(Highlights.getMaximumLength() + 4, pos + right);
}
Highlights.clearMark(3);
Highlights.clearMark(4);
@@ -285,8 +285,8 @@ private void grailMergeRight(int[] arr, int pos, int leftLen, int rightLen, int
this.grailSwap(arr, pos + (mergedPos--), pos + (left--));
}
else this.grailSwap(arr, pos + (mergedPos--), pos + (right--));
- Highlights.markArray(3, pos + left);
- Highlights.markArray(4, pos + right);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, pos + left);
+ Highlights.markArray(Highlights.getMaximumLength() + 4, pos + right);
}
Highlights.clearMark(3);
Highlights.clearMark(4);
@@ -342,8 +342,8 @@ private GrailState grailSmartMergeWithBuffer(int[] arr, int pos, int leftOverLen
this.grailSwap(arr, pos + (dist++), pos + (left++));
}
else this.grailSwap(arr, pos + (dist++), pos + (right++));
- Highlights.markArray(3, pos + left);
- Highlights.markArray(4, pos + right);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, pos + left);
+ Highlights.markArray(Highlights.getMaximumLength() + 4, pos + right);
}
Highlights.clearMark(3);
Highlights.clearMark(4);
@@ -374,8 +374,8 @@ private GrailState grailSmartMergeWithXBuf(int[] arr, int pos, int leftOverLen,
Writes.write(arr, pos + dist++, arr[pos + left++], 1, true, false);
}
else Writes.write(arr, pos + dist++, arr[pos + right++], 1, true, false);
- Highlights.markArray(2, pos + left);
- Highlights.markArray(3, pos + right);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, pos + left);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, pos + right);
}
Highlights.clearMark(2);
Highlights.clearMark(3);
@@ -405,8 +405,8 @@ private void grailMergeLeftWithXBuf(int[] arr, int pos, int leftEnd, int rightEn
Writes.write(arr, pos + dist++, arr[pos + right++], 1, true, false);
}
else Writes.write(arr, pos + dist++, arr[pos + left++], 1, true, false);
- Highlights.markArray(2, pos + left);
- Highlights.markArray(3, pos + right);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, pos + left);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, pos + right);
}
Highlights.clearMark(2);
Highlights.clearMark(3);
@@ -629,8 +629,8 @@ protected void grailLazyStableSort(int[] arr, int pos, int len) {
if(Reads.compare(arr[pos + dist - 1], arr[pos + dist]) > 0) {
this.grailSwap(arr, pos + (dist - 1), pos + dist);
}
- Highlights.markArray(3, pos + dist - 1);
- Highlights.markArray(4, pos + dist);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, pos + dist - 1);
+ Highlights.markArray(Highlights.getMaximumLength() + 4, pos + dist);
}
Highlights.clearMark(3);
Highlights.clearMark(4);
diff --git a/src/templates/HeapSorting.java b/src/main/java/templates/HeapSorting.java
similarity index 74%
rename from src/templates/HeapSorting.java
rename to src/main/java/templates/HeapSorting.java
index 79cdd5d8..391d1bb0 100644
--- a/src/templates/HeapSorting.java
+++ b/src/main/java/templates/HeapSorting.java
@@ -1,9 +1,13 @@
package templates;
-import utils.Delays;
-import utils.Highlights;
-import utils.Reads;
-import utils.Writes;
+import utils.*;
+
+import java.awt.*;
+
+/*
+DO Time: Not Tested
+AddMarks: Working
+ */
/*
*
@@ -18,6 +22,7 @@
*/
public abstract class HeapSorting extends Sort {
+ Color color = new Color(MathUtils.RandomInt(10, 250), MathUtils.RandomInt(10, 250), MathUtils.RandomInt(10, 250));
protected HeapSorting(Delays delayOps, Highlights markOps, Reads readOps, Writes writeOps) {
super(delayOps, markOps, readOps, writeOps);
}
@@ -27,7 +32,7 @@ private void siftDown(int[] array, int root, int dist, int start, double sleep,
if(isMax) compareVal = -1;
else compareVal = 1;
-
+
while (root <= dist / 2) {
int leaf = 2 * root;
if (leaf < dist && Reads.compare(array[start + leaf - 1], array[start + leaf]) == compareVal) {
@@ -46,14 +51,25 @@ private void heapify(int[] arr, int low, int high, double sleep, boolean isMax)
for (int i = length / 2; i >= 1; i--) {
siftDown(arr, i, length, low, sleep, isMax);
}
+ updateColor();
}
-
+
// This version of heap sort works for max and min variants, alongside sorting
// partial ranges of an array.
protected void heapSort(int[] arr, int start, int length, double sleep, boolean isMax) {
+ int k = length;
+ while (k > 0) {
+ k /= 2;
+ for (int j = k;j <= k * 2; ++j){
+ Highlights.markArray(j, j, color, Mark.TYPE_ADDITIONAL);
+ }
+ updateColor();
+ }
heapify(arr, start, length, sleep, isMax);
-
+
for (int i = length - start; i > 1; i--) {
+ Highlights.clearMark(i-1);
+ Highlights.markArray(i - 1, i - 1, Color.GREEN, Mark.TYPE_SORTED);
Writes.swap(arr, start, start + i - 1, sleep, true, false);
siftDown(arr, 1, i - 1, start, sleep, isMax);
}
@@ -62,4 +78,7 @@ protected void heapSort(int[] arr, int start, int length, double sleep, boolean
Writes.reversal(arr, start, start + length - 1, 1, true, false);
}
}
+ protected void updateColor(){
+ this.color = new Color(MathUtils.RandomInt(10, 250), MathUtils.RandomInt(10, 250), MathUtils.RandomInt(10, 250));
+ }
}
\ No newline at end of file
diff --git a/src/templates/HolyGrailSorting.java b/src/main/java/templates/HolyGrailSorting.java
similarity index 97%
rename from src/templates/HolyGrailSorting.java
rename to src/main/java/templates/HolyGrailSorting.java
index f59f898b..9a48da3e 100644
--- a/src/templates/HolyGrailSorting.java
+++ b/src/main/java/templates/HolyGrailSorting.java
@@ -168,7 +168,7 @@ private void grailRotate(int[] array, int pos, int indexA, int indexB) {
private void grailInsertSort(int[] arr, int pos, int len) {
for(int i = 1; i < len; i++) {
int insertPos = grailBinSearch(arr, pos, pos + i, pos + i, false);
- Highlights.markArray(3, insertPos);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, insertPos);
if(insertPos < i) {
int item = arr[pos + i];
@@ -344,8 +344,8 @@ private void grailMergeLeft(int[] arr, int pos, int leftLen, int rightLen, int d
this.grailSwap(arr, pos + (dist++), pos + (right++));
}
else this.grailSwap(arr, pos + (dist++), pos + (left++));
- Highlights.markArray(3, pos + left);
- Highlights.markArray(4, pos + right);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, pos + left);
+ Highlights.markArray(Highlights.getMaximumLength() + 4, pos + right);
}
Highlights.clearMark(3);
Highlights.clearMark(4);
@@ -362,8 +362,8 @@ private void grailMergeRight(int[] arr, int pos, int leftLen, int rightLen, int
this.grailSwap(arr, pos + (mergedPos--), pos + (left--));
}
else this.grailSwap(arr, pos + (mergedPos--), pos + (right--));
- Highlights.markArray(3, pos + left);
- Highlights.markArray(4, pos + right);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, pos + left);
+ Highlights.markArray(Highlights.getMaximumLength() + 4, pos + right);
}
Highlights.clearMark(3);
Highlights.clearMark(4);
@@ -419,8 +419,8 @@ private GrailState grailSmartMergeWithBuffer(int[] arr, int pos, int leftOverLen
this.grailSwap(arr, pos + (dist++), pos + (left++));
}
else this.grailSwap(arr, pos + (dist++), pos + (right++));
- Highlights.markArray(3, pos + left);
- Highlights.markArray(4, pos + right);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, pos + left);
+ Highlights.markArray(Highlights.getMaximumLength() + 4, pos + right);
}
Highlights.clearMark(3);
Highlights.clearMark(4);
@@ -451,8 +451,8 @@ private GrailState grailSmartMergeWithXBuf(int[] arr, int pos, int leftOverLen,
Writes.write(arr, pos + dist++, arr[pos + left++], 1, true, false);
}
else Writes.write(arr, pos + dist++, arr[pos + right++], 1, true, false);
- Highlights.markArray(2, pos + left);
- Highlights.markArray(3, pos + right);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, pos + left);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, pos + right);
}
Highlights.clearMark(2);
Highlights.clearMark(3);
@@ -482,8 +482,8 @@ private void grailMergeLeftWithXBuf(int[] arr, int pos, int leftEnd, int rightEn
Writes.write(arr, pos + dist++, arr[pos + right++], 1, true, false);
}
else Writes.write(arr, pos + dist++, arr[pos + left++], 1, true, false);
- Highlights.markArray(2, pos + left);
- Highlights.markArray(3, pos + right);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, pos + left);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, pos + right);
}
Highlights.clearMark(2);
Highlights.clearMark(3);
@@ -773,8 +773,8 @@ protected void grailLazyStableSort(int[] arr, int pos, int len) {
if(Reads.compare(arr[pos + dist - 1], arr[pos + dist]) > 0) {
this.grailSwap(arr, pos + (dist - 1), pos + dist);
}
- Highlights.markArray(3, pos + dist - 1);
- Highlights.markArray(4, pos + dist);
+ Highlights.markArray(Highlights.getMaximumLength() + 3, pos + dist - 1);
+ Highlights.markArray(Highlights.getMaximumLength() + 4, pos + dist);
}
Highlights.clearMark(3);
Highlights.clearMark(4);
diff --git a/src/templates/InsertionSorting.java b/src/main/java/templates/InsertionSorting.java
similarity index 96%
rename from src/templates/InsertionSorting.java
rename to src/main/java/templates/InsertionSorting.java
index 22897a23..42a2d248 100644
--- a/src/templates/InsertionSorting.java
+++ b/src/main/java/templates/InsertionSorting.java
@@ -47,8 +47,10 @@ protected void insertionSort(int[] array, int start, int end, double sleep, bool
while(pos >= start && Reads.compare(array[pos], current) > 0){
Writes.write(array, pos + 1, array[pos], sleep, true, auxwrite);
pos--;
+ Delays.sleep(0.025);
}
Writes.write(array, pos + 1, current, sleep, true, auxwrite);
+ //Delays.sleep(0.025);
}
}
}
diff --git a/src/templates/MergeSorting.java b/src/main/java/templates/MergeSorting.java
similarity index 93%
rename from src/templates/MergeSorting.java
rename to src/main/java/templates/MergeSorting.java
index 16bd95f4..6333ac8f 100644
--- a/src/templates/MergeSorting.java
+++ b/src/main/java/templates/MergeSorting.java
@@ -73,8 +73,8 @@ else if(Reads.compare(array[low], array[high]) == -1){
Writes.write(tmp, nxt, array[high++], 0, false, true);
}
- Highlights.markArray(1, low);
- Highlights.markArray(2, high);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, low);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, high);
Delays.sleep(1);
}
@@ -83,7 +83,7 @@ else if(Reads.compare(array[low], array[high]) == -1){
for(int i = 0; i < tmp.length; i++){
Writes.write(array, start + i, tmp[i], 1, false, false);
- Highlights.markArray(1, start + i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, start + i);
}
}
}
diff --git a/src/templates/MultipleSortThread.java b/src/main/java/templates/MultipleSortThread.java
similarity index 100%
rename from src/templates/MultipleSortThread.java
rename to src/main/java/templates/MultipleSortThread.java
diff --git a/src/templates/PDQSorting.java b/src/main/java/templates/PDQSorting.java
similarity index 95%
rename from src/templates/PDQSorting.java
rename to src/main/java/templates/PDQSorting.java
index 3083563c..0fde5276 100644
--- a/src/templates/PDQSorting.java
+++ b/src/main/java/templates/PDQSorting.java
@@ -234,21 +234,21 @@ private PDQPair pdqPartRightBranchless(int[] array, int begin, int end) {
Highlights.clearMark(1);
for (int i = 0; i < blockSize;) {
leftOffsets[leftNum] = i++; leftNum += Math.abs(this.pdqLessThan(array[it++], pivot) - 1);
- Writes.changeTempWrites(1); Highlights.markArray(2, it); Delays.sleep(0.5);
+ Writes.changeTempWrites(1); Highlights.markArray(Highlights.getMaximumLength() + 2, it); Delays.sleep(0.5);
leftOffsets[leftNum] = i++; leftNum += Math.abs(this.pdqLessThan(array[it++], pivot) - 1);
- Writes.changeTempWrites(1); Highlights.markArray(2, it); Delays.sleep(0.5);
+ Writes.changeTempWrites(1); Highlights.markArray(Highlights.getMaximumLength() + 2, it); Delays.sleep(0.5);
leftOffsets[leftNum] = i++; leftNum += Math.abs(this.pdqLessThan(array[it++], pivot) - 1);
- Writes.changeTempWrites(1); Highlights.markArray(2, it); Delays.sleep(0.5);
+ Writes.changeTempWrites(1); Highlights.markArray(Highlights.getMaximumLength() + 2, it); Delays.sleep(0.5);
leftOffsets[leftNum] = i++; leftNum += Math.abs(this.pdqLessThan(array[it++], pivot) - 1);
- Writes.changeTempWrites(1); Highlights.markArray(2, it); Delays.sleep(0.5);
+ Writes.changeTempWrites(1); Highlights.markArray(Highlights.getMaximumLength() + 2, it); Delays.sleep(0.5);
leftOffsets[leftNum] = i++; leftNum += Math.abs(this.pdqLessThan(array[it++], pivot) - 1);
- Writes.changeTempWrites(1); Highlights.markArray(2, it); Delays.sleep(0.5);
+ Writes.changeTempWrites(1); Highlights.markArray(Highlights.getMaximumLength() + 2, it); Delays.sleep(0.5);
leftOffsets[leftNum] = i++; leftNum += Math.abs(this.pdqLessThan(array[it++], pivot) - 1);
- Writes.changeTempWrites(1); Highlights.markArray(2, it); Delays.sleep(0.5);
+ Writes.changeTempWrites(1); Highlights.markArray(Highlights.getMaximumLength() + 2, it); Delays.sleep(0.5);
leftOffsets[leftNum] = i++; leftNum += Math.abs(this.pdqLessThan(array[it++], pivot) - 1);
- Writes.changeTempWrites(1); Highlights.markArray(2, it); Delays.sleep(0.5);
+ Writes.changeTempWrites(1); Highlights.markArray(Highlights.getMaximumLength() + 2, it); Delays.sleep(0.5);
leftOffsets[leftNum] = i++; leftNum += Math.abs(this.pdqLessThan(array[it++], pivot) - 1);
- Writes.changeTempWrites(1); Highlights.markArray(2, it); Delays.sleep(0.5);
+ Writes.changeTempWrites(1); Highlights.markArray(Highlights.getMaximumLength() + 2, it); Delays.sleep(0.5);
}
Highlights.clearMark(2);
}
@@ -258,21 +258,21 @@ private PDQPair pdqPartRightBranchless(int[] array, int begin, int end) {
Highlights.clearMark(1);
for (int i = 0; i < blockSize;) {
rightOffsets[rightNum] = ++i; rightNum += this.pdqLessThan(array[--it], pivot);
- Writes.changeTempWrites(1); Highlights.markArray(2, it); Delays.sleep(0.5);
+ Writes.changeTempWrites(1); Highlights.markArray(Highlights.getMaximumLength() + 2, it); Delays.sleep(0.5);
rightOffsets[rightNum] = ++i; rightNum += this.pdqLessThan(array[--it], pivot);
- Writes.changeTempWrites(1); Highlights.markArray(2, it); Delays.sleep(0.5);
+ Writes.changeTempWrites(1); Highlights.markArray(Highlights.getMaximumLength() + 2, it); Delays.sleep(0.5);
rightOffsets[rightNum] = ++i; rightNum += this.pdqLessThan(array[--it], pivot);
- Writes.changeTempWrites(1); Highlights.markArray(2, it); Delays.sleep(0.5);
+ Writes.changeTempWrites(1); Highlights.markArray(Highlights.getMaximumLength() + 2, it); Delays.sleep(0.5);
rightOffsets[rightNum] = ++i; rightNum += this.pdqLessThan(array[--it], pivot);
- Writes.changeTempWrites(1); Highlights.markArray(2, it); Delays.sleep(0.5);
+ Writes.changeTempWrites(1); Highlights.markArray(Highlights.getMaximumLength() + 2, it); Delays.sleep(0.5);
rightOffsets[rightNum] = ++i; rightNum += this.pdqLessThan(array[--it], pivot);
- Writes.changeTempWrites(1); Highlights.markArray(2, it); Delays.sleep(0.5);
+ Writes.changeTempWrites(1); Highlights.markArray(Highlights.getMaximumLength() + 2, it); Delays.sleep(0.5);
rightOffsets[rightNum] = ++i; rightNum += this.pdqLessThan(array[--it], pivot);
- Writes.changeTempWrites(1); Highlights.markArray(2, it); Delays.sleep(0.5);
+ Writes.changeTempWrites(1); Highlights.markArray(Highlights.getMaximumLength() + 2, it); Delays.sleep(0.5);
rightOffsets[rightNum] = ++i; rightNum += this.pdqLessThan(array[--it], pivot);
- Writes.changeTempWrites(1); Highlights.markArray(2, it); Delays.sleep(0.5);
+ Writes.changeTempWrites(1); Highlights.markArray(Highlights.getMaximumLength() + 2, it); Delays.sleep(0.5);
rightOffsets[rightNum] = ++i; rightNum += this.pdqLessThan(array[--it], pivot);
- Writes.changeTempWrites(1); Highlights.markArray(2, it); Delays.sleep(0.5);
+ Writes.changeTempWrites(1); Highlights.markArray(Highlights.getMaximumLength() + 2, it); Delays.sleep(0.5);
}
Highlights.clearMark(2);
}
@@ -308,7 +308,7 @@ private PDQPair pdqPartRightBranchless(int[] array, int begin, int end) {
Highlights.clearMark(1);
for (int i = 0; i < leftSize;) {
leftOffsets[leftNum] = i++; leftNum += Math.abs(this.pdqLessThan(array[it++], pivot) - 1);
- Writes.changeTempWrites(1); Highlights.markArray(2, it); Delays.sleep(0.5);
+ Writes.changeTempWrites(1); Highlights.markArray(Highlights.getMaximumLength() + 2, it); Delays.sleep(0.5);
}
Highlights.clearMark(2);
}
@@ -318,7 +318,7 @@ private PDQPair pdqPartRightBranchless(int[] array, int begin, int end) {
Highlights.clearMark(1);
for (int i = 0; i < rightSize;) {
rightOffsets[rightNum] = ++i; rightNum += this.pdqLessThan(array[--it], pivot);
- Writes.changeTempWrites(1); Highlights.markArray(2, it); Delays.sleep(0.5);
+ Writes.changeTempWrites(1); Highlights.markArray(Highlights.getMaximumLength() + 2, it); Delays.sleep(0.5);
}
Highlights.clearMark(2);
}
diff --git a/src/templates/ShatterSorting.java b/src/main/java/templates/ShatterSorting.java
similarity index 92%
rename from src/templates/ShatterSorting.java
rename to src/main/java/templates/ShatterSorting.java
index e40115f6..4a03ab30 100644
--- a/src/templates/ShatterSorting.java
+++ b/src/main/java/templates/ShatterSorting.java
@@ -50,7 +50,7 @@ private void shatterPartition(int[] array, int length, int num) {
for(int i = 0; i < length; i++){
registers[array[i] / num].add(array[i]);
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
Writes.mockWrite(length, array[i] / num, array[i], 0.5);
}
@@ -71,7 +71,7 @@ protected void shatterSort(int[] array, int length, int num) {
else
Writes.write(tmp, j, array[i * num + j], 0.5, false, true);
- Highlights.markArray(2, i * num + j);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, i * num + j);
}
Highlights.clearMark(2);
@@ -84,7 +84,7 @@ protected void shatterSort(int[] array, int length, int num) {
}
Writes.write(array, i * num + (tmpj % num), tmpj, 1, false, false);
- Highlights.markArray(1, i * num + (tmpj % num));
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i * num + (tmpj % num));
}
Highlights.clearMark(1);
diff --git a/src/templates/ShellSorting.java b/src/main/java/templates/ShellSorting.java
similarity index 85%
rename from src/templates/ShellSorting.java
rename to src/main/java/templates/ShellSorting.java
index b6748f6c..885f67e8 100644
--- a/src/templates/ShellSorting.java
+++ b/src/main/java/templates/ShellSorting.java
@@ -51,15 +51,15 @@ protected void shellSort(ArrayVisualizer ArrayVisualizer, int[] array, int lengt
int v = array[i];
int j = i;
- Highlights.markArray(1, j);
- Highlights.markArray(2, j - h);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, j - h);
Delays.sleep(0.2);
while (j >= h && Reads.compare(array[j - h], v) == 1)
{
- Highlights.markArray(1, j);
- Highlights.markArray(2, j - h);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, j - h);
Writes.write(array, j, array[j - h], 0.5, false, false);
j -= h;
@@ -76,15 +76,15 @@ protected void shellSort(ArrayVisualizer ArrayVisualizer, int[] array, int lengt
int v = array[i];
int j = i;
- Highlights.markArray(1, j);
- Highlights.markArray(2, j - h);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, j - h);
Delays.sleep(0.2);
while (j >= h && Reads.compare(array[j - h], v) == 1)
{
- Highlights.markArray(1, j);
- Highlights.markArray(2, j - h);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 2, j - h);
Writes.write(array, j, array[j - h], 0.5, false, false);
j -= h;
@@ -107,7 +107,7 @@ protected void quickShellSort(int[] array, int lo, int hi) {
while (j >= h && Reads.compare(array[j-h], v) == 1)
{
- Highlights.markArray(1, j);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, j);
Writes.write(array, j, array[j - h], 1, true, false);
j -= h;
diff --git a/src/templates/Sort.java b/src/main/java/templates/Sort.java
similarity index 100%
rename from src/templates/Sort.java
rename to src/main/java/templates/Sort.java
diff --git a/src/templates/TimSorting.java b/src/main/java/templates/TimSorting.java
similarity index 95%
rename from src/templates/TimSorting.java
rename to src/main/java/templates/TimSorting.java
index 6c580de9..4eed4aae 100644
--- a/src/templates/TimSorting.java
+++ b/src/main/java/templates/TimSorting.java
@@ -626,8 +626,8 @@ private void mergeLo(TimSorting ts, int base1, int len1, int base2, int len2) {
// Move first element of second run and deal with degenerate cases
this.Writes.write(a, dest++, a[cursor2++], 1, false, false);
- this.Highlights.markArray(1, dest);
- this.Highlights.markArray(2, cursor2);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 1, dest);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 2, cursor2);
if (--len2 == 0) {
ts.Writes.arraycopy(tmp, cursor1, a, dest, len1, 0.875, true, false);
return;
@@ -635,7 +635,7 @@ private void mergeLo(TimSorting ts, int base1, int len1, int base2, int len2) {
if (len1 == 1) {
ts.Writes.arraycopy(a, cursor2, a, dest, len2, 0.875, true, false);
this.Writes.write(a, dest + len2, tmp[cursor1], 1, false, false); // Last elt of run 1 to end of merge
- this.Highlights.markArray(1, dest + len2);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 1, dest + len2);
return;
}
@@ -651,15 +651,15 @@ private void mergeLo(TimSorting ts, int base1, int len1, int base2, int len2) {
do {
if (this.Reads.compare(a[cursor2], tmp[cursor1]) < 0) {
this.Writes.write(a, dest++, a[cursor2++], 1, false, false);
- this.Highlights.markArray(1, dest);
- this.Highlights.markArray(2, cursor2);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 1, dest);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 2, cursor2);
count2++;
count1 = 0;
if (--len2 == 0)
break outer;
} else {
this.Writes.write(a, dest++, tmp[cursor1++], 1, false, false);
- this.Highlights.markArray(1, dest);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 1, dest);
count1++;
count2 = 0;
if (--len1 == 1)
@@ -683,8 +683,8 @@ private void mergeLo(TimSorting ts, int base1, int len1, int base2, int len2) {
break outer;
}
this.Writes.write(a, dest++, a[cursor2++], 1, false, false);
- this.Highlights.markArray(1, dest);
- this.Highlights.markArray(2, cursor2);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 1, dest);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 2, cursor2);
if (--len2 == 0)
break outer;
@@ -698,7 +698,7 @@ private void mergeLo(TimSorting ts, int base1, int len1, int base2, int len2) {
break outer;
}
this.Writes.write(a, dest++, tmp[cursor1++], 1, false, false);
- this.Highlights.markArray(1, dest);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 1, dest);
if (--len1 == 1)
break outer;
minGallop--;
@@ -712,7 +712,7 @@ private void mergeLo(TimSorting ts, int base1, int len1, int base2, int len2) {
if (len1 == 1) {
ts.Writes.arraycopy(a, cursor2, a, dest, len2, 0.875, true, false);
this.Writes.write(a, dest + len2, tmp[cursor1], 1, false, false); // Last elt of run 1 to end of merge
- this.Highlights.markArray(1, dest + len2);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 1, dest + len2);
} else if (len1 == 0) {
throw new IllegalArgumentException(
"Comparison method violates its general contract!");
@@ -745,8 +745,8 @@ private void mergeHi(TimSorting ts, int base1, int len1, int base2, int len2) {
// Move last element of first run and deal with degenerate cases
this.Writes.write(a, dest--, a[cursor1--], 1, false, false);
- this.Highlights.markArray(1, dest);
- this.Highlights.markArray(2, cursor1);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 1, dest);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 2, cursor1);
if (--len1 == 0) {
ts.Writes.reversearraycopy(tmp, 0, a, dest - (len2 - 1), len2, 0.875, true, false);
return;
@@ -756,7 +756,7 @@ private void mergeHi(TimSorting ts, int base1, int len1, int base2, int len2) {
cursor1 -= len1;
ts.Writes.reversearraycopy(a, cursor1 + 1, a, dest + 1, len1, 0.875, true, false);
this.Writes.write(a, dest, tmp[cursor2], 1, false, false);
- this.Highlights.markArray(1, dest);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 1, dest);
return;
}
@@ -773,15 +773,15 @@ private void mergeHi(TimSorting ts, int base1, int len1, int base2, int len2) {
do {
if (this.Reads.compare(tmp[cursor2], a[cursor1]) < 0) {
this.Writes.write(a, dest--, a[cursor1--], 1, false, false);
- this.Highlights.markArray(1, dest);
- this.Highlights.markArray(2, cursor1);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 1, dest);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 2, cursor1);
count1++;
count2 = 0;
if (--len1 == 0)
break outer;
} else {
this.Writes.write(a, dest--, tmp[cursor2--], 1, false, false);
- this.Highlights.markArray(1, dest);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 1, dest);
count2++;
count1 = 0;
if (--len2 == 1)
@@ -805,7 +805,7 @@ private void mergeHi(TimSorting ts, int base1, int len1, int base2, int len2) {
break outer;
}
this.Writes.write(a, dest--, tmp[cursor2--], 1, false, false);
- this.Highlights.markArray(1, dest);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 1, dest);
if (--len2 == 1)
break outer;
@@ -819,8 +819,8 @@ private void mergeHi(TimSorting ts, int base1, int len1, int base2, int len2) {
break outer;
}
this.Writes.write(a, dest--, a[cursor1--], 1, false, false);
- this.Highlights.markArray(1, dest);
- this.Highlights.markArray(2, cursor1);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 1, dest);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 2, cursor1);
if (--len1 == 0)
break outer;
minGallop--;
@@ -836,7 +836,7 @@ private void mergeHi(TimSorting ts, int base1, int len1, int base2, int len2) {
cursor1 -= len1;
ts.Writes.reversearraycopy(a, cursor1 + 1, a, dest + 1, len1, 0.875, true, false);
this.Writes.write(a, dest, tmp[cursor2], 1, false, false); // Move first elt of run2 to front of merge
- this.Highlights.markArray(1, dest);
+ this.Highlights.markArray(Highlights.getMaximumLength() + 1, dest);
} else if (len2 == 0) {
throw new IllegalArgumentException(
"Comparison method violates its general contract!");
diff --git a/src/templates/WikiSorting.java b/src/main/java/templates/WikiSorting.java
similarity index 99%
rename from src/templates/WikiSorting.java
rename to src/main/java/templates/WikiSorting.java
index 5fb9017a..2ed97460 100644
--- a/src/templates/WikiSorting.java
+++ b/src/main/java/templates/WikiSorting.java
@@ -330,8 +330,8 @@ void MergeInto(int[] from, Range A, Range B, int[] into, int at_index, boolean t
if (Reads.compare(from[B_index], from[A_index]) >= 0) {
Writes.write(into, insert_index, from[A_index], 1, false, tempwrite);
- if(tempwrite) Highlights.markArray(1, A_index);
- else Highlights.markArray(1, insert_index);
+ if(tempwrite) Highlights.markArray(Highlights.getMaximumLength() + 1, A_index);
+ else Highlights.markArray(Highlights.getMaximumLength() + 1, insert_index);
A_index++;
insert_index++;
@@ -343,8 +343,8 @@ void MergeInto(int[] from, Range A, Range B, int[] into, int at_index, boolean t
} else {
Writes.write(into, insert_index, from[B_index], 1, false, tempwrite);
- if(tempwrite) Highlights.markArray(1, B_index);
- else Highlights.markArray(1, insert_index);
+ if(tempwrite) Highlights.markArray(Highlights.getMaximumLength() + 1, B_index);
+ else Highlights.markArray(Highlights.getMaximumLength() + 1, insert_index);
B_index++;
insert_index++;
diff --git a/src/test/Tester.java b/src/main/java/test/Tester.java
similarity index 100%
rename from src/test/Tester.java
rename to src/main/java/test/Tester.java
diff --git a/src/threads/RunAllSorts.java b/src/main/java/threads/RunAllSorts.java
similarity index 100%
rename from src/threads/RunAllSorts.java
rename to src/main/java/threads/RunAllSorts.java
diff --git a/src/threads/RunComparisonSort.java b/src/main/java/threads/RunComparisonSort.java
similarity index 100%
rename from src/threads/RunComparisonSort.java
rename to src/main/java/threads/RunComparisonSort.java
diff --git a/src/threads/RunDistributionSort.java b/src/main/java/threads/RunDistributionSort.java
similarity index 100%
rename from src/threads/RunDistributionSort.java
rename to src/main/java/threads/RunDistributionSort.java
diff --git a/src/threads/RunExchangeSorts.java b/src/main/java/threads/RunExchangeSorts.java
similarity index 100%
rename from src/threads/RunExchangeSorts.java
rename to src/main/java/threads/RunExchangeSorts.java
diff --git a/src/threads/RunInsertionSorts.java b/src/main/java/threads/RunInsertionSorts.java
similarity index 100%
rename from src/threads/RunInsertionSorts.java
rename to src/main/java/threads/RunInsertionSorts.java
diff --git a/src/threads/RunMergeSorts.java b/src/main/java/threads/RunMergeSorts.java
similarity index 100%
rename from src/threads/RunMergeSorts.java
rename to src/main/java/threads/RunMergeSorts.java
diff --git a/src/threads/RunSelectionSorts.java b/src/main/java/threads/RunSelectionSorts.java
similarity index 100%
rename from src/threads/RunSelectionSorts.java
rename to src/main/java/threads/RunSelectionSorts.java
diff --git a/src/utils/Delays.java b/src/main/java/utils/Delays.java
similarity index 51%
rename from src/utils/Delays.java
rename to src/main/java/utils/Delays.java
index 3c5e7be2..03e28279 100644
--- a/src/utils/Delays.java
+++ b/src/main/java/utils/Delays.java
@@ -34,58 +34,97 @@ of this software and associated documentation files (the "Software"), to deal
final public class Delays {
private volatile double SLEEPRATIO;
private volatile boolean SKIPPED;
-
+ private volatile boolean isDelayOverrided;
+
private double addamt;
private double delay;
-
+
+
public Delays() {
this.SLEEPRATIO = 1.0;
this.SKIPPED = false;
this.addamt = 0.0;
+ this.isDelayOverrided = false;
+ }
+
+ public void setDelayOverride(double value) {
+ this.isDelayOverrided = true;
+ this.delay = value;
+ }
+
+ public boolean isDelayOverrided() {
+ return isDelayOverrided;
+ }
+
+ public void setIsOverride(boolean value) {
+ this.isDelayOverrided = value;
}
-
+
public double getCurrentDelay() {
return this.delay;
}
+
public void setCurrentDelay(double value) {
this.delay = value;
}
-
+
public double getSleepRatio() {
return this.SLEEPRATIO;
}
+
public void setSleepRatio(double sleepRatio) {
this.SLEEPRATIO = sleepRatio;
}
-
+
public boolean skipped() {
return this.SKIPPED;
}
+
public void changeSkipped(boolean Bool) {
this.SKIPPED = Bool;
}
-
- public void sleep(double millis){
- if(millis <= 0) {
- return;
- }
-
- this.delay = (millis * (1 / this.SLEEPRATIO));
- this.addamt += this.delay;
-
- long amt = (long) this.delay;
- if(this.addamt >= 1){
- amt += (int) this.addamt;
- this.addamt -= (int) this.addamt;
- }
-
- try {
- // With this for loop, you can change the speed of sorts without waiting for the current delay to finish.
- for(int i = 0; i < amt / this.SLEEPRATIO; i++) {
- Thread.sleep(1);
+
+ public void sleep(double millis) {
+ if (SKIPPED || millis == 0) {
+ try {
+ Thread.sleep(0);
+ } catch (Exception ex) {
+ Logger.getLogger(ArrayVisualizer.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ } else if (!isDelayOverrided) {
+ if (millis <= 0) {
+ return;
+ }
+
+ this.delay = (millis * (1 / this.SLEEPRATIO));
+ this.addamt += this.delay;
+
+ long amt = (long) this.delay;
+ if (this.addamt >= 1) {
+ amt += (int) this.addamt;
+ this.addamt -= (int) this.addamt;
+ }
+ try {
+ // With this for loop, you can change the speed of sorts without waiting for the current delay to finish.
+ for (int i = 0; i < amt / this.SLEEPRATIO; i++) {
+ Thread.sleep(1);
+ }
+ } catch (Exception ex) {
+ Logger.getLogger(ArrayVisualizer.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ } else {
+ try {
+ Thread.sleep((long) delay);
+ SystemUtils.sleepInNanos((int) ((delay % 1) * 1000000));
+ } catch (Exception ex) {
+ Logger.getLogger(ArrayVisualizer.class.getName()).log(Level.SEVERE, null, ex);
}
- } catch(Exception ex) {
- Logger.getLogger(ArrayVisualizer.class.getName()).log(Level.SEVERE, null, ex);
+
}
+
}
+
+ /*public void sleep(double millis) {
+ sleep(millis, false);
+ }*/
}
\ No newline at end of file
diff --git a/src/main/java/utils/Highlights.java b/src/main/java/utils/Highlights.java
new file mode 100644
index 00000000..cf09ff15
--- /dev/null
+++ b/src/main/java/utils/Highlights.java
@@ -0,0 +1,296 @@
+package utils;
+
+import java.awt.*;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+
+import utils.Mark;
+/*
+ *
+MIT License
+
+Copyright (c) 2019 w0rthy
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+ *
+ */
+
+final public class Highlights {
+ // private volatile int[] Highlights;
+
+ //private volatile HashMap Highlights;
+
+ private volatile ArrayList Highlights;
+
+ private volatile int maxIndexMarked; // The Highlights array is huge and slows down the visualizer if all its indices are read.
+ // In an attempt to speed up the containsPosition() method while also giving anyone room
+ // to use the full array, this variable keeps track of the farthest index an array position
+ // has been highlighted at. The containsPosition() method only scans the Highlights array
+ // up to index maxIndexMarked.
+
+ // If an index is used in markArray() that is higher than maxPossibleMarked, the variable
+ // is updated. If the highest index used in Highlights is removed with clearMark(), the
+ // next biggest index (less than what was removed) is found and updates maxIndexMarked.
+
+ // Trivially, clearAllMarks() resets maxIndexMarked to zero. This variable also serves
+ // as a subtle design hint for anyone who wants to add an algorithm to the app to highlight
+ // array positions at low indices which are close together.
+
+ // This way, the program runs more efficiently, and looks pretty. :)
+
+ private volatile int markCount;
+
+ private boolean FANCYFINISH;
+ private boolean marksEnabled;
+ private boolean AdditionalMarksEnabled;
+ private boolean sortedMarksEnabled;
+ private volatile boolean fancyFinish;
+ private volatile int trackFinish;
+ private volatile int maximumLength;
+
+ public Highlights(int maximumLength) {
+ //this.Highlights = new int[maximumLength];
+ this.Highlights = new ArrayList<>(maximumLength + 10);
+ this.FANCYFINISH = true;
+ this.marksEnabled = true;
+ this.AdditionalMarksEnabled = true;
+ this.sortedMarksEnabled = true;
+ this.maxIndexMarked = 0;
+ this.markCount = 0;
+ this.maximumLength = maximumLength;
+
+ //Arrays.fill(Highlights, -1);
+ //Collections.fill(Highlights, new Mark(-1));
+ for (int i = 0; i < maximumLength + 10; ++i) {
+ Highlights.add(new Mark(-1));
+ }
+ }
+
+ public void setMarksEnabled(boolean value) {
+ this.marksEnabled = value;
+ }
+
+ public boolean getMarksEnabled() {
+ return this.marksEnabled;
+ }
+
+ public int getMaximumLength() {
+ return this.maximumLength;
+ }
+
+ public void setAdditionalMarksEnabled(boolean value) {
+ this.AdditionalMarksEnabled = value;
+ }
+
+ public boolean getAdditionalMarksEnabled() {
+ return this.AdditionalMarksEnabled;
+ }
+
+ public void setSortedMarksEnabled(boolean value) {
+ this.sortedMarksEnabled = value;
+ }
+
+ public boolean getsortedMarksEnabled() {
+ return this.sortedMarksEnabled;
+ }
+
+ public boolean fancyFinishEnabled() {
+ return this.FANCYFINISH;
+ }
+
+ public void toggleFancyFinishes(boolean Bool) {
+ this.FANCYFINISH = Bool;
+ }
+
+ public boolean fancyFinishActive() {
+ return this.fancyFinish;
+ }
+
+ public void toggleFancyFinish(boolean Bool) {
+ this.fancyFinish = Bool;
+ }
+
+ public int getFancyFinishPosition() {
+ return this.trackFinish;
+ }
+
+ public void incrementFancyFinishPosition() {
+ this.trackFinish++;
+ }
+
+ public void resetFancyFinish() {
+ this.trackFinish = -1; // Magic number that clears the green sweep animation
+ }
+
+ public int getMaxIndex() {
+ return this.maxIndexMarked;
+ }
+
+ public int getMarkCount() {
+ return this.markCount;
+ }
+
+ //Consider revising highlightList().
+ //public int[] highlightList() {
+ public ArrayList highlightList() {
+ return this.Highlights;
+ }
+
+ public boolean containsPosition(int arrayPosition) {
+ for (int i = 0; i <= this.maxIndexMarked; i++) {
+ if (Highlights.get(i).getPosition() == -1) {
+ continue;
+ } else if (Highlights.get(i).getPosition() == arrayPosition) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public void markArray(int marker, int markPosition, Color color, int type) {
+ try {
+ if (markPosition < 0) {
+ if (markPosition == -1)
+ throw new Exception("Highlights.markArray(): Invalid position! -1 is reserved for the clearMark method.");
+ else if (markPosition == -5)
+ throw new Exception("Highlights.markArray(): Invalid position! -5 was the constant originally used to unmark numbers in the array. Instead, use the clearMark method.");
+ else throw new Exception("Highlights.markArray(): Invalid position!");
+ } else {
+ //Highlights[marker] = markPosition;
+
+ //Highlights.get(marker).setPosition(markPosition);
+ //Highlights.set(marker, new Mark(markPosition, Highlights.get(marker).getColor()));
+ if ((AdditionalMarksEnabled && type == Mark.TYPE_ADDITIONAL) || (sortedMarksEnabled && type == Mark.TYPE_SORTED)) {
+ this.setMark(marker, markPosition, color, type);
+ } else if (type == Mark.TYPE_DEFAULT) {
+ this.setMark(marker, markPosition, Color.RED, Mark.TYPE_DEFAULT);
+ }
+
+ this.markCount++;
+
+ if (marker > this.maxIndexMarked) {
+ this.maxIndexMarked = marker;
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ public void markArray(int marker, int markPosition) {
+ this.markArray(marker, markPosition, Color.RED, Mark.TYPE_DEFAULT);
+ }
+
+ public void clearMark(int marker) {
+ //Highlights[marker] = -1; // -1 is used as the magic number to unmark a position in the main array
+ //Highlights.set(marker, new Mark(-1, Highlights.get(marker).getColor()));
+ this.setMarkPosition(marker, -1);
+ this.markCount--;
+
+ if (marker == this.maxIndexMarked) {
+ this.maxIndexMarked = 0;
+
+ for (int i = marker - 1; i >= 0; i--) {
+ //if(Highlights[i] != -1) {
+ if (Highlights.get(i).getPosition() != -1) {
+ this.maxIndexMarked = i;
+ break;
+ }
+ }
+ }
+ }
+
+ public void clearAllMarks() {
+ //Arrays.fill(this.Highlights, -1);
+ Collections.fill(Highlights, new Mark(-1));
+ this.maxIndexMarked = 0;
+ this.markCount = 0;
+ }
+
+ public void clearAllMarks(int type) {
+ for (int i = 0; i < Highlights.size(); ++i) {
+ if (getMark(i).getType() == type) {
+ clearMark(i);
+ }
+ }
+ }
+
+ public void clearMarks(int start, int end, int type) {
+ for (int i = start; i <= end; ++i) {
+ if (this.getMark(i).getType() == type) {
+ this.clearMark(i);
+ }
+ }
+ }
+
+ public void clearMarks(int start, int end) {
+ clearMarks(start, end, Mark.TYPE_DEFAULT);
+ }
+
+ public void clearAdditionalMarks(int start, int end) {
+ clearMarks(start, end, Mark.TYPE_ADDITIONAL);
+ }
+
+ public Mark getMark(int index) {
+ return this.Highlights.get(index);
+ }
+
+ public Mark getMarkByPos(int pos) {
+ for (Mark mark : this.Highlights) {
+ if (mark.getPosition() == pos) {
+ return mark;
+ }
+ }
+ return null;
+ }
+
+ public void clearAllMarksByPos(int pos) {
+ for (Mark mark : this.Highlights) {
+ if (mark.getPosition() == pos) {
+ mark.setPosition(-1);
+ }
+ }
+ }
+
+ public void clearFirstMarkByPos(int pos) {
+ for (Mark mark : this.Highlights) {
+ if (mark.getPosition() == pos) {
+ mark.setPosition(-1);
+ break;
+ }
+ }
+ }
+
+ public void setMark(int index, int position, Color color, int type) {
+ this.Highlights.set(index, new Mark(position, color, type));
+ }
+
+ public void setMarkPosition(int index, int position) {
+ this.setMark(index, position, this.getMark(index).getColor(), this.getMark(index).getType());
+ }
+
+ public void setMarkColor(int index, Color color) {
+ this.setMark(index, this.getMark(index).getPosition(), color, this.getMark(index).getType());
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/utils/Mark.java b/src/main/java/utils/Mark.java
new file mode 100644
index 00000000..97d843f8
--- /dev/null
+++ b/src/main/java/utils/Mark.java
@@ -0,0 +1,53 @@
+package utils;
+
+import java.awt.*;
+
+public class Mark {
+ /*static int RED = 0;
+ static int GREEN = 1;
+ static int BLUE = 2;*/
+ public static int TYPE_DISABLED_MARK = -1;
+ public static int TYPE_DEFAULT = 0;
+ public static int TYPE_ADDITIONAL = 1;
+ public static int TYPE_SORTED = 2;
+ public static int TYPE_ANALYSIS = 3;
+
+ private int position;
+ private int type;
+ private Color color;
+ //boolean isAdditional = false;
+ //public Mark(int position, Color color, int type){
+
+
+ public Mark(int position, Color color, int type){
+ this.position = position;
+ this.color = color;
+ this.type = type;
+ }
+ public Mark(int position){
+ this.position = position;
+ this.color = Color.RED;
+ this.type = Mark.TYPE_DEFAULT;
+ }
+ public int getPosition(){
+ return this.position;
+ }
+ public Color getColor(){
+ return this.color;
+ }
+ /*public boolean isAdditional(){
+ return this.isAdditional;
+ }*/
+ public boolean isDefault(){
+ return this.type == Mark.TYPE_DEFAULT;
+ }
+ public int getType(){
+ return this.type;
+ }
+ public void setPosition(int pos){
+ this.position = pos;
+ }
+ public void setColor(Color color){
+ this.color = color;
+ }
+}
diff --git a/src/main/java/utils/MathUtils.java b/src/main/java/utils/MathUtils.java
new file mode 100644
index 00000000..d4b760d2
--- /dev/null
+++ b/src/main/java/utils/MathUtils.java
@@ -0,0 +1,17 @@
+package utils;
+
+import java.math.BigInteger;
+
+public class MathUtils {
+ public static int RandomInt(int min, int max) {
+ return (int) (Math.random() * (max - min) + min);
+ }
+ public static long getDecimal(double value, int toFixed){
+ String tmp = "0."+String.valueOf(value).split("\\.")[1];
+ int lastIndex = Math.min(tmp.length(), toFixed + 2);
+ tmp = tmp.substring(0, lastIndex);
+ float decimal = Float.parseFloat(tmp);
+
+ return (long) (decimal * BigInteger.valueOf(10).pow(lastIndex - 2).intValue());
+ }
+}
diff --git a/src/utils/Reads.java b/src/main/java/utils/Reads.java
similarity index 95%
rename from src/utils/Reads.java
rename to src/main/java/utils/Reads.java
index 2998f270..be9d258d 100644
--- a/src/utils/Reads.java
+++ b/src/main/java/utils/Reads.java
@@ -109,7 +109,7 @@ public int analyzeMax(int[] array, int length, double sleep, boolean mark) {
if(Timer.timerEnabled()) Timer.stopLap();
if(mark) {
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
Delays.sleep(sleep);
}
}
@@ -133,7 +133,7 @@ public int analyzeMaxLog(int[] array, int length, int base, double sleep, boolea
if(Timer.timerEnabled()) Timer.stopLap();
if(mark) {
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
Delays.sleep(sleep);
}
}
@@ -156,7 +156,7 @@ public int analyzeBit(int[] array, int length) {
if(Timer.timerEnabled()) Timer.stopLap();
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
Delays.sleep(0.75);
}
if(Timer.timerEnabled()) Timer.startLap();
diff --git a/src/utils/Renderer.java b/src/main/java/utils/Renderer.java
similarity index 87%
rename from src/utils/Renderer.java
rename to src/main/java/utils/Renderer.java
index b0d33926..11a9a393 100644
--- a/src/utils/Renderer.java
+++ b/src/main/java/utils/Renderer.java
@@ -35,6 +35,8 @@ of this software and associated documentation files (the "Software"), to deal
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+
+
*
*/
@@ -57,12 +59,12 @@ public boolean resized() {
}
final public class Renderer {
- private Bars Bars;
+ public Bars Bars;
+ private Highlights Highlights;
private Circular Circular;
private Hoops Hoops;
private Mesh Mesh;
private Pixels Pixels;
-
private volatile double xscl; //TODO: Change to xScale/yScale
private volatile double yscl;
@@ -130,7 +132,7 @@ public void initializeVisuals(ArrayVisualizer ArrayVisualizer, VisualStyles Visu
this.Hoops = new Hoops();
this.Mesh = new Mesh();
this.Pixels = new Pixels();
-
+ this.Highlights = ArrayVisualizer.getHighlights();
this.frames = 0;
this.updateGraphics(ArrayVisualizer);
ArrayVisualizer.updateFontSize();
@@ -206,13 +208,34 @@ public Color getIntColor(int i, int length) {
return Color.getHSBColor(((float) i / length), 1.0F, 0.8F);
}
- public void markBar(Graphics2D bar, boolean color, boolean rainbow, boolean analysis) {
- if(color || rainbow) {
+ public void markBar(Graphics2D bar,int index, boolean colorEnabled, boolean rainbow, boolean analysis, Color color) {
+ /* if((colorEnabled || rainbow)&&(Highlights.getMark(index).getType()!=Mark.TYPE_SORTED)) {
if(analysis) bar.setColor(Color.WHITE);
else bar.setColor(Color.BLACK);
}
else if(analysis) bar.setColor(Color.BLUE);
- else bar.setColor(Color.RED);
+ else bar.setColor(color);*/
+
+ if(Highlights.getMarksEnabled()) {
+ if (colorEnabled || rainbow) {
+ if (analysis) {
+ bar.setColor(Color.WHITE);
+ } else if (Highlights.getMark(index).getType() == Mark.TYPE_DEFAULT) {
+ bar.setColor(Color.BLACK);
+ } else {
+ bar.setColor(color);
+ }
+ } else {
+ if (analysis) {
+ bar.setColor(Color.BLUE);
+ } else {
+ bar.setColor(color);
+ }
+ }
+ }
+ }
+ public void markBar(Graphics2D bar, int index,boolean color, boolean rainbow, boolean analysis){
+ markBar(bar, index, color, rainbow, analysis, Color.RED);
}
private void markBarFancy(Graphics2D bar, boolean color, boolean rainbow) {
if(!color && !rainbow) bar.setColor(Color.RED);
@@ -236,22 +259,32 @@ public void lineClear(Graphics2D line, boolean color, int[] array, int i, int le
else line.setColor(Color.WHITE);
line.setStroke(new BasicStroke((float) (3f * (width / 1280f))));
}
-
- public void setRectColor(Graphics2D rect, boolean color, boolean analysis) {
- if(color) rect.setColor(Color.WHITE);
- else if(analysis) rect.setColor(Color.BLUE);
- else rect.setColor(Color.RED);
+ //TODO: Add Extended Marks Support
+ public void setRectColor(Graphics2D rect, int index, boolean colorEnabled, boolean analysis) {
+ if (Highlights.getMarksEnabled()) {
+
+ if (colorEnabled) {
+ if (Highlights.getMark(index).isDefault()) {
+ rect.setColor(Color.WHITE);
+ } else {
+ rect.setColor(Highlights.getMark(index).getColor());
+ }
+ } else if (analysis) rect.setColor(Color.BLUE);
+ else rect.setColor(Color.RED);
+ }
}
@SuppressWarnings("fallthrough")
//The longer the array length, the more bars marked. Makes the visual easier to see when bars are thinner.
public void colorMarkedBars(int logOfLen, int index, Highlights Highlights, Graphics2D mainRender, boolean colorEnabled, boolean rainbowEnabled, boolean analysis) {
+ //if(Highlights.getMark(index).getType() == Mark.TYPE_DEFAULT || Highlights.getAdditionalMarksEnabled()){
switch(logOfLen) {
- case 12: if(Highlights.containsPosition(index - 3)) markBar(mainRender, colorEnabled, rainbowEnabled, analysis);
- case 11: if(Highlights.containsPosition(index - 2)) markBar(mainRender, colorEnabled, rainbowEnabled, analysis);
- case 10: if(Highlights.containsPosition(index - 1)) markBar(mainRender, colorEnabled, rainbowEnabled, analysis);
- default: if(Highlights.containsPosition(index)) markBar(mainRender, colorEnabled, rainbowEnabled, analysis);
+ case 12: if(Highlights.containsPosition(index - 3)) markBar(mainRender, index,colorEnabled, rainbowEnabled, analysis, Highlights.getMark(index).getColor());
+ case 11: if(Highlights.containsPosition(index - 2)) markBar(mainRender, index, colorEnabled, rainbowEnabled, analysis, Highlights.getMark(index).getColor());
+ case 10: if(Highlights.containsPosition(index - 1)) markBar(mainRender, index, colorEnabled, rainbowEnabled, analysis, Highlights.getMark(index).getColor());
+ default: if(Highlights.containsPosition(index)) markBar(mainRender, index, colorEnabled, rainbowEnabled, analysis, Highlights.getMark(index).getColor());
}
+ //}
}
@SuppressWarnings("fallthrough")
@@ -375,4 +408,7 @@ public void drawPixels(int[] array, ArrayVisualizer ArrayVisualizer, Graphics2D
public void drawVisual(VisualStyles VisualStyles, int[] array, ArrayVisualizer ArrayVisualizer, Graphics2D mainRender, Graphics2D extraRender, Highlights Highlights) {
VisualStyles.drawVisual(array, ArrayVisualizer, this, mainRender, extraRender, Highlights);
}
+ /*public void setBarsStrokeEnabled(boolean value){
+ Bars.setStrokeEnabled(value);
+ }*/
}
\ No newline at end of file
diff --git a/src/utils/Shuffles.java b/src/main/java/utils/Shuffles.java
similarity index 75%
rename from src/utils/Shuffles.java
rename to src/main/java/utils/Shuffles.java
index c81f9d08..93c8c03a 100644
--- a/src/utils/Shuffles.java
+++ b/src/main/java/utils/Shuffles.java
@@ -33,32 +33,52 @@ public enum Shuffles {
@Override
public void shuffleArray(int[] array, ArrayVisualizer ArrayVisualizer, Delays Delays, Highlights Highlights, Writes Writes) {
int currentLen = ArrayVisualizer.getCurrentLength();
-
+
+ double curDelay = Delays.getCurrentDelay();
+ boolean isOverrided = Delays.isDelayOverrided();
+ Delays.setIsOverride(false);
+
for(int i = 0; i < currentLen; i++){
Writes.swap(array, i, (int)(Math.random()*currentLen), 0, true, false);
if(ArrayVisualizer.shuffleEnabled()) Delays.sleep(1);
}
+
+ Delays.setIsOverride(isOverrided);
+ Delays.setCurrentDelay(curDelay);
+
}
},
REVERSE {
@Override
public void shuffleArray(int[] array, ArrayVisualizer ArrayVisualizer, Delays Delays, Highlights Highlights, Writes Writes) {
int currentLen = ArrayVisualizer.getCurrentLength();
-
+
+ double curDelay = Delays.getCurrentDelay();
+ boolean isOverrided = Delays.isDelayOverrided();
+ Delays.setIsOverride(false);
+
for (int left = 0, right = currentLen - 1; left < right; left++, right--) {
// swap the values at the left and right indices
Writes.swap(array, left, right, 0, true, false);
if(ArrayVisualizer.shuffleEnabled()) Delays.sleep(1);
}
+
+ Delays.setIsOverride(isOverrided);
+ Delays.setCurrentDelay(curDelay);
+
}
},
SIMILAR {
@Override
public void shuffleArray(int[] array, ArrayVisualizer ArrayVisualizer, Delays Delays, Highlights Highlights, Writes Writes) {
int currentLen = ArrayVisualizer.getCurrentLength();
-
+
+ double curDelay = Delays.getCurrentDelay();
+ boolean isOverrided = Delays.isDelayOverrided();
+ Delays.setIsOverride(false);
+
for(int i = 0; i < currentLen - 8; i++) {
array[i] = currentLen / 2;
@@ -74,31 +94,49 @@ public void shuffleArray(int[] array, ArrayVisualizer ArrayVisualizer, Delays De
if(ArrayVisualizer.shuffleEnabled()) Delays.sleep(1);
}
+
+ Delays.setIsOverride(isOverrided);
+ Delays.setCurrentDelay(curDelay);
+
}
},
ALMOST {
@Override
public void shuffleArray(int[] array, ArrayVisualizer ArrayVisualizer, Delays Delays, Highlights Highlights, Writes Writes) {
int currentLen = ArrayVisualizer.getCurrentLength();
-
+
+ double curDelay = Delays.getCurrentDelay();
+ boolean isOverrided = Delays.isDelayOverrided();
+ Delays.setIsOverride(false);
+
for(int i = 0; i < Math.max(currentLen / 20, 1); i++){
Writes.swap(array, (int)(Math.random()*currentLen), (int)(Math.random()*currentLen), 0, true, false);
if(ArrayVisualizer.shuffleEnabled()) Delays.sleep(2);
}
+
+ Delays.setIsOverride(isOverrided);
+ Delays.setCurrentDelay(curDelay);
}
},
ALREADY {
@Override
public void shuffleArray(int[] array, ArrayVisualizer ArrayVisualizer, Delays Delays, Highlights Highlights, Writes Writes) {
int currentLen = ArrayVisualizer.getCurrentLength();
-
+
+ double curDelay = Delays.getCurrentDelay();
+ boolean isOverrided = Delays.isDelayOverrided();
+ Delays.setIsOverride(false);
+
for(int i = 0; i < currentLen; i++) {
if(ArrayVisualizer.shuffleEnabled()) {
- Highlights.markArray(1, i);
+ Highlights.markArray(Highlights.getMaximumLength() + 1, i);
Delays.sleep(1);
}
}
+ Delays.setIsOverride(isOverrided);
+ Delays.setCurrentDelay(curDelay);
+
}
};
diff --git a/src/utils/Sounds.java b/src/main/java/utils/Sounds.java
similarity index 94%
rename from src/utils/Sounds.java
rename to src/main/java/utils/Sounds.java
index fcc76164..37b15fc8 100644
--- a/src/utils/Sounds.java
+++ b/src/main/java/utils/Sounds.java
@@ -110,13 +110,14 @@ public void run() {
int noteCount = Math.min(Highlights.getMarkCount(), NUMCHANNELS);
int voice = 0;
- for(int i : Highlights.highlightList()) {
+ //for(int i : Highlights.highlightList()) {
+ for(Mark i : Highlights.highlightList()) {
try {
- if(i != -1) {
+ if(i.getPosition() != -1 && (i.isDefault())) {
int currentLen = ArrayVisualizer.getCurrentLength();
//PITCH
- double pitch = Sounds.this.array[Math.min(Math.max(i, 0), currentLen - 1)] / (double) currentLen * (PITCHMAX - PITCHMIN) + PITCHMIN;
+ double pitch = Sounds.this.array[Math.min(Math.max(i.getPosition(), 0), currentLen - 1)] / (double) currentLen * (PITCHMAX - PITCHMIN) + PITCHMIN;
int pitchmajor = (int) pitch;
int pitchminor = (int)((pitch-((int)pitch))*8192d)+8192;
diff --git a/src/main/java/utils/SystemUtils.java b/src/main/java/utils/SystemUtils.java
new file mode 100644
index 00000000..7495de47
--- /dev/null
+++ b/src/main/java/utils/SystemUtils.java
@@ -0,0 +1,11 @@
+package utils;
+
+public class SystemUtils {
+ public static void sleepInNanos(int nanos){
+ long start = System.nanoTime();
+ long end=0;
+ do{
+ end = System.nanoTime();
+ }while(start + (long) nanos >= end);
+ }
+}
diff --git a/src/utils/Timer.java b/src/main/java/utils/Timer.java
similarity index 100%
rename from src/utils/Timer.java
rename to src/main/java/utils/Timer.java
diff --git a/src/utils/Writes.java b/src/main/java/utils/Writes.java
similarity index 93%
rename from src/utils/Writes.java
rename to src/main/java/utils/Writes.java
index 5032cefe..f6e5b090 100644
--- a/src/utils/Writes.java
+++ b/src/main/java/utils/Writes.java
@@ -135,8 +135,8 @@ private void updateSwap(boolean auxwrite) {
}
private void markSwap(int a, int b) {
- Highlights.markArray(1, a);
- Highlights.markArray(2, b);
+ Highlights.markArray(Highlights.getMaximumLength()+1, a);
+ Highlights.markArray(Highlights.getMaximumLength()+2, b);
}
public void swap(int[] array, int a, int b, double pause, boolean mark, boolean auxwrite) {
@@ -178,7 +178,7 @@ public void reversal(int[] array, int start, int length, double sleep, boolean m
}
public void write(int[] array, int at, int equals, double pause, boolean mark, boolean auxwrite) {
- if(mark) Highlights.markArray(1, at);
+ if(mark) Highlights.markArray(Highlights.getMaximumLength() + 1, at);
if(auxwrite) tempWrites++;
else writes++;
@@ -193,7 +193,7 @@ public void write(int[] array, int at, int equals, double pause, boolean mark, b
}
public void multiDimWrite(int[][] array, int x, int y, int equals, double pause, boolean mark, boolean auxwrite) {
- if(mark) Highlights.markArray(1, x);
+ if(mark) Highlights.markArray(Highlights.getMaximumLength() + 1, x);
if(auxwrite) tempWrites++;
else writes++;
@@ -285,8 +285,8 @@ public void arraycopy(int[] src, int srcPos, int[] dest, int destPos, int length
this.write(dest, destPos + i, src[srcPos + i], sleep, false, temp);
if(mark) {
- if(temp) Highlights.markArray(1, srcPos + i);
- else Highlights.markArray(1, destPos + i);
+ if(temp) Highlights.markArray(Highlights.getMaximumLength() + 1, srcPos + i);
+ else Highlights.markArray(Highlights.getMaximumLength() + 1, destPos + i);
}
}
}
@@ -296,8 +296,8 @@ public void reversearraycopy(int[] src, int srcPos, int[] dest, int destPos, int
this.write(dest, destPos + i, src[srcPos + i], sleep, false, temp);
if(mark) {
- if(temp) Highlights.markArray(1, srcPos + i);
- else Highlights.markArray(1, destPos + i);
+ if(temp) Highlights.markArray(Highlights.getMaximumLength() + 1, srcPos + i);
+ else Highlights.markArray(Highlights.getMaximumLength() + 1, destPos + i);
}
}
}
diff --git a/src/visuals/Bars.java b/src/main/java/visuals/Bars.java
similarity index 83%
rename from src/visuals/Bars.java
rename to src/main/java/visuals/Bars.java
index bae63e73..29b49c6e 100644
--- a/src/visuals/Bars.java
+++ b/src/main/java/visuals/Bars.java
@@ -1,7 +1,6 @@
package visuals;
-import java.awt.Color;
-import java.awt.Graphics2D;
+import java.awt.*;
import main.ArrayVisualizer;
import utils.Highlights;
@@ -30,10 +29,16 @@ of this software and associated documentation files (the "Software"), to deal
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+
+
*
*/
final public class Bars {
+ boolean strokeEnabled = true;
+ public void setStrokeEnabled(boolean value){
+ this.strokeEnabled = value;
+ }
public void drawVisual(int[] array, ArrayVisualizer ArrayVisualizer, Renderer Renderer, Graphics2D mainRender, Graphics2D extraRender, Highlights Highlights) {
for(int i = 0; i < ArrayVisualizer.getCurrentLength(); i++){
if(Highlights.fancyFinishActive()) {
@@ -72,6 +77,14 @@ else if(ArrayVisualizer.rainbowEnabled() || ArrayVisualizer.colorEnabled()) {
if(width > 0) {
y = (int) (((ArrayVisualizer.windowHeight() - 20)) - array[i] * Renderer.getYScale());
mainRender.fillRect(Renderer.getOffset() + 20, y, width, (int) Math.max(array[i] * Renderer.getYScale(), 1));
+ if(strokeEnabled && width >= 5){
+ double thickness = 1;
+ Stroke oldStroke = mainRender.getStroke();
+ mainRender.setStroke(new BasicStroke((float) thickness));
+ mainRender.setColor(Color.BLACK);
+ mainRender.drawLine(Renderer.getOffset() + 20, y, Renderer.getOffset() + 20, (int) Math.max(array[i] * Renderer.getYScale()-1, 1) + y);
+ mainRender.setStroke(oldStroke);
+ }
}
Renderer.setOffset(Renderer.getOffset() + width);
diff --git a/src/visuals/Circular.java b/src/main/java/visuals/Circular.java
similarity index 97%
rename from src/visuals/Circular.java
rename to src/main/java/visuals/Circular.java
index 49eb5050..96ea0837 100644
--- a/src/visuals/Circular.java
+++ b/src/main/java/visuals/Circular.java
@@ -155,7 +155,7 @@ else if(ArrayVisualizer.getCurrentLength() != 2){
}
else {
if(Highlights.containsPosition(i)) {
- Renderer.setRectColor(extraRender, ArrayVisualizer.colorEnabled(), ArrayVisualizer.analysisEnabled());
+ Renderer.setRectColor(extraRender, i, ArrayVisualizer.colorEnabled(), ArrayVisualizer.analysisEnabled());
drawRect = true;
}
else drawRect = false;
@@ -216,7 +216,7 @@ else if(ArrayVisualizer.spiralEnabled()) {
}
else {
if(Highlights.containsPosition(i)) {
- Renderer.setRectColor(extraRender, ArrayVisualizer.colorEnabled(), ArrayVisualizer.analysisEnabled());
+ Renderer.setRectColor(extraRender, i,ArrayVisualizer.colorEnabled(), ArrayVisualizer.analysisEnabled());
drawRect = true;
}
else drawRect = false;
@@ -240,7 +240,7 @@ else if(ArrayVisualizer.spiralEnabled()) {
}
else {
if(Highlights.containsPosition(i)) {
- Renderer.markBar(mainRender, ArrayVisualizer.colorEnabled(), ArrayVisualizer.rainbowEnabled(), ArrayVisualizer.analysisEnabled());
+ Renderer.markBar(mainRender,i, ArrayVisualizer.colorEnabled(), ArrayVisualizer.rainbowEnabled(), ArrayVisualizer.analysisEnabled());
}
Polygon p = new Polygon();
diff --git a/src/visuals/Hoops.java b/src/main/java/visuals/Hoops.java
similarity index 100%
rename from src/visuals/Hoops.java
rename to src/main/java/visuals/Hoops.java
diff --git a/src/visuals/Mesh.java b/src/main/java/visuals/Mesh.java
similarity index 100%
rename from src/visuals/Mesh.java
rename to src/main/java/visuals/Mesh.java
diff --git a/src/visuals/Pixels.java b/src/main/java/visuals/Pixels.java
similarity index 95%
rename from src/visuals/Pixels.java
rename to src/main/java/visuals/Pixels.java
index 92d306ed..fc3d6096 100644
--- a/src/visuals/Pixels.java
+++ b/src/main/java/visuals/Pixels.java
@@ -88,13 +88,13 @@ else if(ArrayVisualizer.colorEnabled()) {
int y = 0;
int width = (int) (Renderer.getXScale() * (i + 1)) - Renderer.getOffset();
- if(Highlights.containsPosition(i) && ArrayVisualizer.getCurrentLength() != 2) {
- Renderer.setRectColor(extraRender, ArrayVisualizer.colorEnabled(), ArrayVisualizer.analysisEnabled());
+ if(Highlights.containsPosition(i) && ArrayVisualizer.getCurrentLength() != 2 && Highlights.getMark(i).isDefault() && Highlights.getMarksEnabled()) {
+ Renderer.setRectColor(extraRender, i, ArrayVisualizer.colorEnabled(), ArrayVisualizer.analysisEnabled());
drawRect = true;
}
else drawRect = false;
- if(width > 0) {
+ if(width > 0 || !ArrayVisualizer.getIsDotsLimited()) {
y = (int) ((ArrayVisualizer.windowHeight() - 20) - (array[i] * Renderer.getYScale()));
mainRender.fillRect(Renderer.getOffset() + 20, y, Renderer.getDotDimensions(), Renderer.getDotDimensions());
diff --git a/src/visuals/VisualStyles.java b/src/main/java/visuals/VisualStyles.java
similarity index 100%
rename from src/visuals/VisualStyles.java
rename to src/main/java/visuals/VisualStyles.java
diff --git a/src/utils/Highlights.java b/src/utils/Highlights.java
deleted file mode 100644
index bd49cf86..00000000
--- a/src/utils/Highlights.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package utils;
-
-import java.util.Arrays;
-
-/*
- *
-MIT License
-
-Copyright (c) 2019 w0rthy
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
- *
- */
-
-final public class Highlights {
- private volatile int[] Highlights;
-
- private volatile int maxIndexMarked; // The Highlights array is huge and slows down the visualizer if all its indices are read.
- // In an attempt to speed up the containsPosition() method while also giving anyone room
- // to use the full array, this variable keeps track of the farthest index an array position
- // has been highlighted at. The containsPosition() method only scans the Highlights array
- // up to index maxIndexMarked.
-
- // If an index is used in markArray() that is higher than maxPossibleMarked, the variable
- // is updated. If the highest index used in Highlights is removed with clearMark(), the
- // next biggest index (less than what was removed) is found and updates maxIndexMarked.
-
- // Trivially, clearAllMarks() resets maxIndexMarked to zero. This variable also serves
- // as a subtle design hint for anyone who wants to add an algorithm to the app to highlight
- // array positions at low indices which are close together.
-
- // This way, the program runs more efficiently, and looks pretty. :)
-
- private volatile int markCount;
-
- private boolean FANCYFINISH;
- private volatile boolean fancyFinish;
- private volatile int trackFinish;
-
- public Highlights(int maximumLength) {
- this.Highlights = new int[maximumLength];
- this.FANCYFINISH = true;
- this.maxIndexMarked = 0;
- this.markCount = 0;
-
- Arrays.fill(Highlights, -1);
- }
-
- public boolean fancyFinishEnabled() {
- return this.FANCYFINISH;
- }
- public void toggleFancyFinishes(boolean Bool) {
- this.FANCYFINISH = Bool;
- }
-
- public boolean fancyFinishActive() {
- return this.fancyFinish;
- }
- public void toggleFancyFinish(boolean Bool) {
- this.fancyFinish = Bool;
- }
-
- public int getFancyFinishPosition() {
- return this.trackFinish;
- }
- public void incrementFancyFinishPosition() {
- this.trackFinish++;
- }
- public void resetFancyFinish() {
- this.trackFinish = -1; // Magic number that clears the green sweep animation
- }
-
- public int getMaxIndex() {
- return this.maxIndexMarked;
- }
- public int getMarkCount() {
- return this.markCount;
- }
-
- //Consider revising highlightList().
- public int[] highlightList() {
- return this.Highlights;
- }
- public boolean containsPosition(int arrayPosition) {
- for(int i = 0; i <= this.maxIndexMarked; i++) {
- if(Highlights[i] == -1) {
- continue;
- }
- else if(Highlights[i] == arrayPosition) {
- return true;
- }
- }
-
- return false;
- }
- public void markArray(int marker, int markPosition) {
- try {
- if(markPosition < 0) {
- if(markPosition == -1) throw new Exception("Highlights.markArray(): Invalid position! -1 is reserved for the clearMark method.");
- else if(markPosition == -5) throw new Exception("Highlights.markArray(): Invalid position! -5 was the constant originally used to unmark numbers in the array. Instead, use the clearMark method.");
- else throw new Exception("Highlights.markArray(): Invalid position!");
- }
- else {
- Highlights[marker] = markPosition;
- this.markCount++;
-
- if(marker > this.maxIndexMarked) {
- this.maxIndexMarked = marker;
- }
- }
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
- public void clearMark(int marker) {
- Highlights[marker] = -1; // -1 is used as the magic number to unmark a position in the main array
- this.markCount--;
-
- if(marker == this.maxIndexMarked) {
- this.maxIndexMarked = 0;
-
- for(int i = marker - 1; i >= 0; i--) {
- if(Highlights[i] != -1) {
- this.maxIndexMarked = i;
- break;
- }
- }
- }
- }
- public void clearAllMarks() {
- Arrays.fill(this.Highlights, -1);
- this.maxIndexMarked = 0;
- this.markCount = 0;
- }
-}
\ No newline at end of file
diff --git a/target/ArrayVisualizer-2.1.0.jar b/target/ArrayVisualizer-2.1.0.jar
new file mode 100644
index 00000000..c8c1b521
Binary files /dev/null and b/target/ArrayVisualizer-2.1.0.jar differ