Создание нерекурсивного быстрого метода сортировки - C#
Формулировка задачи:
Ребят, последний этаап... можете составить простенький алгоритм быстрой нерекурсивной сортировки
Решение задачи: «Создание нерекурсивного быстрого метода сортировки»
textual
Листинг программы
static void QuickSort<T>(T[] array) where T : IComparable<T>
{
var comparer = Comparer<T>.Default;
var stack = new Stack<ArraySegment<T>>();
stack.Push(new ArraySegment<T>(array, 0, array.Length));
while (stack.Count > 0) {
var segment = stack.Pop();
int left = segment.Offset;
int right = left + segment.Count - 1;
array = segment.Array;
var pivot = array[left + (right - left) / 2];
while (left <= right) {
while (comparer.Compare(array[left], pivot) < 0) left++;
while (comparer.Compare(array[right], pivot) > 0) right--;
if (left <= right) {
var tmp = array[left];
array[left++] = array[right];
array[right--] = tmp;
}
}
if (left < segment.Offset + segment.Count - 1) stack.Push(new ArraySegment<T>(array, left, segment.Offset + segment.Count - left));
if (segment.Offset < left - 1) stack.Push(new ArraySegment<T>(array, segment.Offset, left - segment.Offset));
}
}