QuickSort на C#

Обьясните пожалуйста суть алгоритма сортировки quicksort и помогите пожалуйста реализовать это всё на языке C#

Алгоритм быстрой сортировки следующий:

1. Выбираем опорный элемент

2. Разбиваем массив на 3 части

3. Создаём переменные l и r — индексы соответственно начала и конца рассматриваемого подмассива

4. Увеличиваем l, пока l-й элемент меньше опорного Уменьшаем r, пока r-й элемент больше опорного. Если l всё ещё меньше r, то меняем l-й и r-й элементы местами, инкрементируем l и декрементируем r Если l вдруг становится больше r, то прерываем цикл

5. Повторяем рекурсивно, пока не дойдём до массива из 1 элемента

Как видим, тут нет абсолютно ничего сложного. Теперь реализация на C#:

public static void Quicksort(IComparable[] elements, int left, int right)
        {
            int i = left, j = right;
            IComparable pivot = elements[(left   right) / 2];
        while (i <= j)
        {
            while (elements[i].CompareTo(pivot) < 0)
            {
                i  ;
            }

            while (elements[j].CompareTo(pivot) > 0)
            {
                j--;
            }

            if (i <= j)
            {
                // Swap
                IComparable tmp = elements[i];
                elements[i] = elements[j];
                elements[j] = tmp;

                i  ;
                j--;
            }
        }

        // Recursive calls
        if (left < j)
        {
            Quicksort(elements, left, j);
        }

        if (i < right)
        {
            Quicksort(elements, i, right);
        }
    }