TRACE OF ITEM MOVED FORWARD¹
TRACE OF ITEM MOVED BACKWARD¹
ITEM IN MEMORY
COMPARISON INDICATOR
CURRENT OPERATION
END / SEQUENCE SORTED
MAX NUMBER OF INVERSIONS
STARTING NUMBER OF INVERSIONS
¹COLOR OF TRACE = COLOR OF MOVED ITEM

close X
Sorting a sequence of items is one of the pillar of Computer Science.

A sorting algorithm is an algorithm that organizes elements of a sequence in a certain order.
Since the early days of computing, the sorting problem has been one of the main battlefields for researchers. The reason behind this is not only the need of solving a very common task but also the challenge of solving a complex problem in the most efficient way.

**SORTING** is an attempt to visualize and help to understand how some of the most famous sorting algorithms work.
This project provides two standpoints to look at algorithms, one is more *artistic* (apologies to any real artist out there), the other is more *analytical* aiming at explaining algorithm step by step.

This project does not want to teach the theory of sorting algorithms, there are amazing resources, books and courses for this purpose. **SORTING** is for the ones who want to see these algorithms under a different ligth and hopefully appreciate the processing and brain power behind these piece of genius that in many ways have changed the way we live.

Generative Art is one of the ways to represent computational processes. Transforming the data generated by an autonomous system into the features of an artwork can lead to unexpected results.

**SORTING** was born to create visual representations of sorting algorithms with the hope of finding visual patterns. It turned out that the visual footprints of algorithms are unique and differ from each other and they look gorgeous.

Another way of looking at this project is as an analytical tool to study how sorting algorithms work. Beside generating visuals representations, **SORTING** provides a walk-through that guides the reader step after step along the process of ordering a lists of integer numbers.

All the steps are tracked: comparison operations happening behind the scene through the use of animated indicators, changes of position of items through animations and arcs, and temporary storing of items.

**SORTING** makes it possible to compare how different algorithms behave with different initial set of items.

The inversions chart adds a measure of the *distance* from the final goal both in terms of inversions and operations(comparisons and exchanges) that can be tracked during the execution of the algorithm.

The Inversion count for a sequence of items indicates the distance of that sequence from being sorted.
Simply put if the sequence is already sorted then the inversion count is equal to 0, instead if the sequence is sorted in reverse order than the count is the maximum.

An inversion is a pair of positions in a sequence where the elements there located are out of their natural order.

Formally, a pair of elements (A[ i ] , A[ j ]) of a sequence A is called an inversion if i<j and A[ i ]>A[ j ].

There have been many attempts to visualize sorting algorithms. Some of them have been great resources for the completion of **SORTING**, among them Sorting Algorithm Animations (D. R. Martin), sortvis.org (A. Cortesi) and Visualization and comparison of sorting algorithms in C# (R. Kanasz).

Huge thanks go to Alex Conconi for reviewing the project and giving invaluable suggestions and feedback.