Работающая быстрая сортировка (quicksort) на C#...

????? ???????, ??????? ?????? ?????????? ?????? ????? ?????? ??????? ? ?????? ?????? ????? ?????? ??????????????? ??????? ?? C#, C++ ? Python, ????????? ????? ?? ??????? ?????????? (quicksort). ? ??? ???????? ????? ???????? ????????? ????? ????????? ??????? ???????? ? ???????? ????????? ?????. ??-??, ????, ??? ????????? ?????????? ? ?????????? ??????, ?? ?????????? ????????? ???????? ??? ???????, ? ????? ????????? ??????????? ? ??????. ? ??? ??? ??????????. ????? ????????. ???-?????? ????? ????

static public void Quicksort(int[] ar)
{
     if (ar.Length > 1) Quicksort(ar, 0, ar.Length - 1);
}

static private void Quicksort(int[] ar, int left, int right)
{
     if (left == right) return;
     int i = left + 1;
     int j = right;
     int pivot = ar[left];

     // Loop invariant i <= j
     while (i < j)
{
          if (ar[i] <= pivot) i++;
          else if (ar[j] > pivot) j--;
          else
          { // Swap ith and jth elements
               int m = ar[i]; ar[i] = ar[j]; ar[j] = m;
}
}
     // Now i == j

     if (ar[j] <= pivot /* it also means that i == right, because j was never moved */)
{
          // Left most element is array's maximum
          int m = ar[left]; ar[left] = ar[right]; ar[right] = m;
Quicksort(ar, left, right-1);
}
     else
     {
Quicksort(ar, left, i - 1);
Quicksort(ar, i, right);
}
}

???? ??????? ??????? ???????? ?? ???????? ??????: ??? ?? ?? ?????????????? ??????, ?????????? ????????????? ??????? Quicksort (????? i<j) ?????? ????? ????? ??????? ????? ????. ??????? ????????, ? ????? ????? ??????. ?????? ????????? ????? ??? ?????: https://www.eldar.com/node/154 (??, ??, ? ????? ????????? ??????????? ????? ?? ??????. ??????? ????? ????????? ?? ??????? ??? ?? ????????).

? ??, ???, ??? ??????, ????? ???? ? ????????????? ?????.