Skip to content

mszula/visual-sorting

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

119 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ”ฎ ๐Ÿ”ˆ Visual Sorting aka The Sound Of Sorting

Visual Sorting is a tool that provides a visualization of sorting algorithms, accompanied by an auditory experience. It allows users to witness how various sorting algorithms work through dynamic horizontal bars.

VisualSorting-QuickSort.mp4

๐Ÿš€ Play with it

https://mszula.github.io/visual-sorting/

๐ŸŒŸ Features

  • Dynamic Visualization: Vertical bars present the sorting process in real-time.
  • Step-by-Step Exploration: Go through each step of the algorithm, and analyze what going on.
  • Sound Experience: Each vertical bar represents a value in the sorting array. As the algorithm works on a bar, a sound is produced based on its height. There are 24 different sound oscillator options to choose from.
  • Side-by-Side Compare Mode: Race two algorithms on the same array โ€” toggle the compare icon in the header, pick algorithms per panel, switch between horizontal and vertical layout.
  • Live Metrics: Comparisons, swaps and array accesses counted in real time and displayed in the header. Non-comparison sorts (Counting, Radix) clearly show Cmp = 0.
  • Keyboard Shortcuts: Space start/stop, โ†’ step, R shuffle, โ†‘/โ†“ faster/slower, [/] previous/next algorithm, M mute, ? opens the full reference.
  • Input Array Options: Shuffle, Reverse, Valley, Mountain, Wave, Nearly Sorted and Pipe Organ patterns. Array sizes from 2 to 1024 elements. The selected pattern persists when you resize.
  • Adjustable Speed: Control the pace by dynamically changing the delay, to speed up or slow down the process, with precision up to 500 ms.
  • Persistent Preferences: Array size, delay, sound type and selected pattern survive page reloads.
  • Themes: Various themes from DaisyUI so that everyone can find something for themselves.

๐Ÿค– Supported Sorting Algorithms

๐Ÿ†• Recently Added Algorithms

  • Counting Sort - Non-comparison sorting algorithm that counts occurrences of each value
  • Comb Sort - Improved Bubble Sort variant that uses gap-based comparisons
  • Intro Sort - Hybrid algorithm combining Quick Sort, Heap Sort, and Insertion Sort

๐ŸŒŠ Recently Added Patterns

  • Wave - Permutation of 1..n where bar heights trace a single sine period
  • Nearly Sorted - Sorted array with ~5% random swaps โ€” adaptive sorts (Insertion, Tim) shine here
  • Pipe Organ - Three ascending mini-mountain peaks evoking organ pipes

๐Ÿ” Rationale

Visual Sorting was created to explore and learn Svelte, a modern JavaScript framework. Inspired by Timo Bingmann's captivating video "The Sound of Sorting" (https://www.youtube.com/watch?v=kPRA0W1kECg), which combines sorting algorithm visualizations with sound, I wanted to develop a tool that offers a similar educational and engaging experience. Visual Sorting aims to make learning sorting algorithms both enjoyable and insightful through dynamic visuals and sounds.

๐Ÿ™Œ Contribution

If you have suggestions for how Visual Sorting could be improved, or want to report a bug, open an issue! We'd love all and any contributions. If you can, leave a star as well ๐ŸŒŸ

๐Ÿ’ป Setup

Built with โ˜•๏ธ and โค๏ธ using Svelte, SvelteKit, Vite, Tailwind, and DaisyUI.

Install dependencies:

npm install

Start the project:

npm run dev

And that's it ๐Ÿ˜„

โญ Star History

Star History Chart

๐Ÿ“„ License

ISC ยฉ 2024 Mateusz Szuล‚a

Sponsor this project

Contributors