Создание нерекурсивного быстрого метода сортировки - 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));
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д