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; }