private static unsafe int QuickSortPartion(TemplateStructType* array, int start, int end, Comparer<TemplateStructType> comparer)
        {
            TemplateStructType pivot, startValue, endValue;
            pivot = array[start];
            while (start < end)
            {
                startValue = array[start];
                while (start < end && comparer.Compare(startValue, pivot) > 0)
                {
                    start++;
                    startValue = array[start];
                }

                endValue = array[end];
                while (start < end && comparer.Compare(endValue, pivot) < 0)
                {
                    end--;
                    endValue = array[end];
                }

                if (start < end)
                {
                    array[end] = startValue;
                    array[start] = endValue;
                }
            }

            return start;
        }
        private static unsafe int QuickSortPartion(TemplateStructType* array, int start, int end, bool descending)
        {
            TemplateStructType pivot, startValue, endValue;
            pivot = array[start];
            while (start < end)
            {
                startValue = array[start];
                while ((start < end)
                    && ((descending && (startValue.CompareTo(pivot) > 0))
                        || (!descending) && (startValue.CompareTo(pivot) < 0)))
                {
                    start++;
                    startValue = array[start];
                }

                endValue = array[end];
                while ((start < end)
                    && ((descending && (endValue.CompareTo(pivot) < 0))
                        || (!descending) && (endValue.CompareTo(pivot) > 0)))
                {
                    end--;
                    endValue = array[end];
                }

                if (start < end)
                {
                    array[end] = startValue;
                    array[start] = endValue;
                }
            }

            return start;
        }