Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 13 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,25 @@
# Visualization of different sorting algorithms
<h1 align="center">
Visualization of different sorting algorithms</h1>

<p align="center">
<img src="assets/README-animation.gif" alt="Insertion sort gif"/></p>

## How to build executable file?

run this in an IDE's terminal
In an IDE's terminal:

``` bash
```
mvn clean package
```

This command will create `/taget` folder and executable `fileName-version-jar-with-dependencies.jar` inside.
This command will create `/taget` folder and executable `sav-version-jar-with-dependencies.jar` inside.

## How to run?

open terminal in a folder with `.jar` file and run:
1. Build project or download latest release from release section.

2. Open terminal in a folder with `.jar` file and run this command:

``` bash
java -jar filename.jar
```
java -jar sav-1.0-jar-with-dependencies.jar
```
Binary file added assets/README-animation.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@
<artifactId>JTerminal</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>org.jline</groupId>
<artifactId>jline</artifactId>
<version>3.26.2</version>
</dependency>
</dependencies>
<build>
<plugins>
Expand Down
19 changes: 17 additions & 2 deletions src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,22 @@
import ui.TestUI;
import org.jline.reader.LineReader;
import org.jline.reader.LineReaderBuilder;
import org.jline.terminal.Terminal;
import org.jline.terminal.TerminalBuilder;
import ui.UI;

public class Main {
public static void main(String[] args) {
TestUI.start();
UI ui;
try{
Terminal terminal = TerminalBuilder.builder().system(true).build();
LineReader reader = LineReaderBuilder.builder().terminal(terminal).build();
ui = new UI(terminal, reader);
ui.start();

}
catch (Exception e){
e.printStackTrace();
}

}
}
5 changes: 2 additions & 3 deletions src/main/java/algorithms/BubbleSort.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,14 @@
import java.util.HashSet;
import java.util.Set;

public class BubbleSort extends AlgorithmSort {
public class BubbleSort extends SortingAlgorithm {
public BubbleSort(ArrayList<Integer> array) {
super(array);
}


@Override
public void sort() {
int SLEEP_DURATION = 5;
int SLEEP_DURATION = 3;

if (array.isEmpty()) {
System.out.println("Array is empty, nothing to sort.");
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/algorithms/InsertionSort.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@
import java.util.HashSet;
import java.util.Set;

public class InsertionSort extends AlgorithmSort {
public class InsertionSort extends SortingAlgorithm {

public InsertionSort(ArrayList<Integer> array) {
super(array);
}

@Override
public void sort() {
int SLEEP_DURATION = 10;
int SLEEP_DURATION = 2;
Set<Integer> sortedIndices = new HashSet<>();

if (array.isEmpty()) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/algorithms/QuickSort.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import java.util.HashSet;
import java.util.Set;

public class QuickSort extends AlgorithmSort {
public class QuickSort extends SortingAlgorithm {

public QuickSort(ArrayList<Integer> array) {
super(array);
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/algorithms/SelectionSort.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import java.util.HashSet;
import java.util.Set;

public class SelectionSort extends AlgorithmSort {
public class SelectionSort extends SortingAlgorithm {

public SelectionSort(ArrayList<Integer> array) {
super(array);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package algorithms;

import java.util.ArrayList;

public abstract class AlgorithmSort {
public abstract class SortingAlgorithm {
protected ArrayList<Integer> array;

public AlgorithmSort(ArrayList<Integer> array ){
if(array == null){
public SortingAlgorithm(ArrayList<Integer> array) {
if (array == null) {
throw new IllegalArgumentException("Array can't be empty.");
}
this.array = array;
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/ui/BubbleSort.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ui;

import static ui.UI.array;

class BubbleSort {
protected static void start() {
Utils.prepareForSorting("Bubble Sort");
new algorithms.BubbleSort(array).sort();
Utils.sleepALittle(1000);
}
}
11 changes: 11 additions & 0 deletions src/main/java/ui/InsertionSort.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ui;

import static ui.UI.array;

class InsertionSort {
protected static void start() {
Utils.prepareForSorting("Insertion sort");
new algorithms.InsertionSort(array).sort();
Utils.sleepALittle(1000);
}
}
33 changes: 33 additions & 0 deletions src/main/java/ui/Menu.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package ui;

import io.github.shuoros.jterminal.JTerminal;

import static ui.UI.reader;

class Menu {
protected static void printOptions() {
JTerminal.clear();
Utils.printInCenter("AWESOME algorithm visualization app", "=");
JTerminal.println("""
\nSelect an option:\
\n\
\n(1)\tRun Bubble sort\
\n(2)\tRun Insertion sort\
\n(3)\tRun Quick sort\
\n(4)\tRun Selection sort\
\n(a)\tRun all\
\n(e)\texit""");
}

protected static void handleOptions() {
switch (reader.readLine().trim().toLowerCase()) {
case "1" -> BubbleSort.start();
case "2" -> InsertionSort.start();
case "3" -> QuickSort.start();
case "4" -> SelectionSort.start();
case "a", "all" -> StartAllOption.start();
case "exit", "e" -> System.exit(0);
default -> JTerminal.println("Wrong input");
}
}
}
11 changes: 11 additions & 0 deletions src/main/java/ui/QuickSort.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ui;

import static ui.UI.array;

class QuickSort {
protected static void start() {
Utils.prepareForSorting("Quick Sort");
new algorithms.QuickSort(array).sort();
Utils.sleepALittle(1000);
}
}
11 changes: 11 additions & 0 deletions src/main/java/ui/SelectionSort.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ui;

import static ui.UI.array;

class SelectionSort {
protected static void start() {
Utils.prepareForSorting("Selection Sort");
new algorithms.InsertionSort(array).sort();
Utils.sleepALittle(1000);
}
}
10 changes: 10 additions & 0 deletions src/main/java/ui/StartAllOption.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package ui;

class StartAllOption {
protected static void start() {
BubbleSort.start();
InsertionSort.start();
QuickSort.start();
SelectionSort.start();
}
}
36 changes: 0 additions & 36 deletions src/main/java/ui/TestUI.java

This file was deleted.

29 changes: 29 additions & 0 deletions src/main/java/ui/UI.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package ui;

import io.github.shuoros.jterminal.JTerminal;
import org.jline.reader.LineReader;
import org.jline.terminal.Terminal;

import java.util.ArrayList;

public class UI {
protected static ArrayList<Integer> array;
public static Terminal terminal;
protected static LineReader reader;

public UI(Terminal terminal, LineReader reader) {
UI.terminal = terminal;
UI.reader = reader;
array = new ArrayList<>();
}

public void start() {
while (true) {
Menu.printOptions();
Menu.handleOptions();
Utils.sleepALittle(1500);
}
}


}
Loading