Создайте нерекурсивный параметр быстрой сортировки
Вот как звучит эта задача: Разработайте и запрограммируйте нерекурсивную версию алгоритма быстрой сортировки. [Индикация. Используйте магазин для хранения упорядоченных пар (i, j). Пара, хранящаяся в хранилище, означает, что элементы Xi,..., Xj должны быть упорядочены. Например, изначально магазин должен был содержать пару (1, 8). После того, как значение X5 = 5 выбрано в качестве среднего, пара (1, 8) должна быть удалена из магазина, а пары (1, 4) и (6, 8) должны быть помещены в магазин. Алгоритм завершается, когда хранилище пусто.]
Как сделать нерекурсивным этот алгоритм?
Что я уже пробовал:
class QuickSorting { public static void sorting(double[] arr, long first, long last) { double p = arr[(last - first)/2 + first]; double temp; long i = first, j = last; while(i <= j) { while(arr[i] < p && i <= last) ++i; while(arr[j] > p && j >= first) --j; if(i <= j) { temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; ++i; --j; } } if(j > first) sorting(arr, first, j); if(i < last) sorting(arr, i, last); } } class Test { static void Main(string[] args) { double[] arr = new double[100]; //We fill the array with random numbers. Random rd = new Random(); for(int i = 0; i < arr.Length; ++i) { arr[i] = rd.Next(1, 101); } System.Console.WriteLine("The array before sorting:"); foreach(double x in arr) { System.Console.Write(x + " "); } //sort QuickSorting.sorting(arr, 0, arr.Length - 1); System.Console.WriteLine("nnThe array after sorting:"); foreach(double x in arr) { System.Console.Write(x + " "); } System.Console.WriteLine("nnPress the <Enter> key"); System.Console.ReadLine(); } }