A QuickSort algorithm
Quicksort chooses an element of the array to serve as the pivot element and
then moves two pointers in from the ends of the array until values are found
that should be swapped to have a more sorted array this is then done recursively
the subarray contained on each side of the pivot until fully sorted.
array
(*[]): the input array[comparator]
(Function): a function to compare2
values *(defaults asc->desc)*[step]
(Function): an optional function that gets applied at each step
(*): the sorted array