Создание нерекурсивного быстрого метода сортировки - 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));
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы