Быстрая сортировка массива

Реализация алгоритма быстрой сортировки массива, разработанный английским математиком Чарьзом Хоаром во время работы в МГУ 1960 году.

using System;
using System;
namespace IndustrialSoftware
{
  public static class Arrays
  {
      public static void Swap<T>(T[] data, int i, int j)
      {
          T t = data[i];
          data[i] = data[j];
          data[j] = t;
      }

      public static void QuickSort<T>(T[] data) where T : IComparable<T>
      {
          if (data == null)
              throw new ArgumentNullException("data");
          if (data.Length > 1)
          {
            lock (data.SyncRoot)
            {
              QuickSort(data, 0, data.Length - 1);
            }
          }
      }

      private static void QuickSort<T>(T[] data, int L, int R) where T : IComparable<T>
      {
        if (R - L == 1)
        {
            if (data[L].CompareTo(data[R]) == 1)
                Swap<T>(data, L, R);
            return;
        }

        int l = L, r = R, M = (R + L) >> 1;

        while (l <= r)
        {
            while (l < data.Length && data[l].CompareTo(data[M]) < 0)
                l++;
            while (r >= 0 && data[r].CompareTo(data[M]) > 0)
                r--;

            if (l <= r)
            {
                Swap<T>(data, l, r);
                
                if (l == M)
                    M = r;
                else if (r == M)
                    M = l;

                l++;
                r--;
            }
        }
        
        if (r - L > 0)
            QuickSort<T>(data, L, r);

        if (R - l > 0)
            QuickSort<T>(data, l, R);
    }
  }
}