Shuffling algorithms are used to rearrange the elements in an array in a random order.
The shuffling algorithms are implemented as functions that take an array of generic elements as a parameter, and return the shuffled array. The functions follow this signature:
type ShufflingFunction<T> = (array: T[]) => T[];