Grampy Cat Ответов: 1

Создайте нерекурсивный параметр быстрой сортировки


Вот как звучит эта задача: Разработайте и запрограммируйте нерекурсивную версию алгоритма быстрой сортировки. [Индикация. Используйте магазин для хранения упорядоченных пар (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();
   }
}

1 Ответов

Рейтинг:
0