Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hwstradling/multisorterfx
JavaFX application to teach common sorting algorithms.
https://github.com/hwstradling/multisorterfx
bubblesort insertion-sort java javafx mergesort quicksort selectionsort sorting-algorithms teaching-tool
Last synced: 10 days ago
JSON representation
JavaFX application to teach common sorting algorithms.
- Host: GitHub
- URL: https://github.com/hwstradling/multisorterfx
- Owner: HWStradling
- Created: 2024-10-18T20:21:12.000Z (3 months ago)
- Default Branch: master
- Last Pushed: 2024-11-18T23:49:49.000Z (about 2 months ago)
- Last Synced: 2025-01-05T12:09:19.859Z (10 days ago)
- Topics: bubblesort, insertion-sort, java, javafx, mergesort, quicksort, selectionsort, sorting-algorithms, teaching-tool
- Language: Java
- Homepage:
- Size: 134 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# MultiSorter (Work in Progress)
This is a **JavaFX-based application** designed to **visualize sorting algorithms**.
The application provides an interactive interface for triggering various sorting algorithms and observing the sorting process in step-by-step.
The main goal of the project is to serve as an educational tool,
helping users to understand sorting algorithms through clear visualization.## Project Status
This project is currently a **work in progress**.
Having implemented the last sorting algorithms and a basic prototype UI,
my next task is to implement the
backend **teaching queue** and **notification queue** and their corresponding user interface's.## Features:
### Backend:
- **Bubble Sort**: Repeatedly compares and swaps adjacent elements until the array is sorted. Simple but inefficient for large datasets.
- **Insertion Sort**: Builds a sorted section of the array by inserting each element into its correct position. Efficient for small or nearly sorted datasets.
- **Quick Sort**: A "divide and conquer" algorithm that partitions the array around a pivot and recursively sorts sub-arrays. Highly efficient for large datasets.
- **Selection Sort**: Repeatedly selects the smallest (or largest) element from the unsorted portion and moves it to the sorted portion.
- **Merge Sort**: Recursively divides the array into halves, sorts each half, and merges them.
- **Thread-safe arrays**: Unsorted and Sorted thread-safe arrays to decouple the frontend and backend preventing UI stuttering for large arrays.
- **Notification Queue:** ***(Not Implemented)*** Queue's notification events decoupling the notification producer and consumer.
- **Teaching Operations Queue:** ***(Not Implemented)*** Queue's sorting actions in a standardised way that can be displayed graphically ,
also decouples in the same way as the notification queue.### User Interface:
- **Splash Scene**: Displays the splash scene logo.
- **Prototype Sorting UI and Splash Scene** ***(Partial Implementation)*** Basic UI Layout as a prototype facilitating basic sorting and I/O functionality
- **Notification Queue UI**: ***(Not Implemented)*** Displays important messages such as validation errors and info that needs the user's attention.
- **Teaching Operations Queue UI**: ***(Not Implemented)*** Displays step-by-step operations like swaps, comparisons, and recursion documenting the sorting process.## Potential Future Improvements:
- **Algorithms**: Addition of Heap Sort, Radix Sort, Shell Sort etc.
- **UX:** Implement Playback Controls i.e. play, pause, step forward, step back, speed control for the teaching queue.
- **Accessibility:** Add the ability to modify the color scheme (color blindness), text-to-speech, ability to modify the font size etc.## Getting Started
### Prerequisites
- **Java 17 or higher**
- **[JavaFX SDK](https://gluonhq.com/products/javafx/)** (required for Java 11+)
- **IDE**: Any modern Java IDE (e.g., Eclipse, IntelliJ IDEA, or NetBeans)### Installation
1. Clone the repository:
```bash
git clone https://github.com/HWStradling/MultiSorterFX.git
2. Run the main method in the SplashScene class.
3. Enjoy !!!