Создание нерекурсивного быстрого метода сортировки - C#

Узнай цену своей работы

Формулировка задачи:

Ребят, последний этаап... можете составить простенький алгоритм быстрой нерекурсивной сортировки

Решение задачи: «Создание нерекурсивного быстрого метода сортировки»

textual
Листинг программы
  1. static void QuickSort<T>(T[] array) where T : IComparable<T>
  2. {
  3.     var comparer = Comparer<T>.Default;
  4.     var stack = new Stack<ArraySegment<T>>();
  5.     stack.Push(new ArraySegment<T>(array, 0, array.Length));
  6.  
  7.     while (stack.Count > 0) {
  8.         var segment = stack.Pop();
  9.  
  10.         int left = segment.Offset;
  11.         int right = left + segment.Count - 1;
  12.  
  13.         array = segment.Array;
  14.         var pivot = array[left + (right - left) / 2];
  15.  
  16.         while (left <= right) {
  17.             while (comparer.Compare(array[left], pivot) < 0) left++;
  18.             while (comparer.Compare(array[right], pivot) > 0) right--;
  19.             if (left <= right) {
  20.                 var tmp = array[left];
  21.                 array[left++] = array[right];
  22.                 array[right--] = tmp;
  23.             }
  24.         }
  25.  
  26.         if (left < segment.Offset + segment.Count - 1) stack.Push(new ArraySegment<T>(array, left, segment.Offset + segment.Count - left));
  27.         if (segment.Offset < left - 1) stack.Push(new ArraySegment<T>(array, segment.Offset, left - segment.Offset));
  28.     }
  29. }

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


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

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

5   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы