Сортировка Слияния не через рекурсию!! - C#

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

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

Ребята, выручайте, срочно надо сделать сортировку СЛИЯНИЯ не через рекурсию... я ее вот так сделал
Листинг программы
  1. private void LocalSort(int[] mass, int l, int r)
  2. {
  3. if (l >= r)
  4. return;
  5. int m = (l + r) / 2;
  6. LocalSort(mass, l, m);
  7. LocalSort(mass, m + 1, r);
  8. Merge(mass, l, m, r);
  9. }
  10. private void Merge(int[] mass, int l, int m, int r)
  11. {
  12. if (m + 1 > r) return;
  13. int[] b = new int[mass.Length];
  14. for (int i = l; i != m + 1; i++)
  15. {
  16. b[i] = mass[i];
  17. }
  18. for (int i = m + 1; i != r + 1; i++)
  19. {
  20. b[i] = mass[r + m + 1 - i];
  21. }
  22. int k = l;
  23. int j = r;
  24. for (int i = l; i != r + 1; i++)
  25. {
  26. Comparing(k, j);
  27. if (b[k] <= b[j])
  28. {
  29. UnPermutation(i, j);
  30. mass[i] = b[k++];
  31. Permutation(i, j);
  32. }
  33. else
  34. {
  35. UnPermutation(i, j);
  36. mass[i] = b[j--];
  37. Permutation(i, j);
  38. }
  39. }
  40. }
А надо чтобы через перестановки....( я ваще в недоумении как это сделать? и ваще реально ли?

Решение задачи: «Сортировка Слияния не через рекурсию!!»

textual
Листинг программы
  1. static Int32[] Merge_Sort(Int32[] massive)
  2.         {
  3.             if (massive.Length == 1)
  4.                 return massive;
  5.             Int32 mid_point = massive.Length / 2;
  6.             return Merge(Merge_Sort(massive.Take(mid_point).ToArray()), Merge_Sort(massive.Skip(mid_point).ToArray()));
  7.         }
  8.  
  9.         static Int32[] Merge(Int32[] mass1, Int32[] mass2)
  10.         {
  11.             Int32 a = 0, b = 0;
  12.             Int32[] merged = new int[mass1.Length + mass2.Length];
  13.             for (Int32 i = 0; i < mass1.Length + mass2.Length; i++)
  14.             {
  15.                 if (b < mass2.Length && a < mass1.Length)
  16.                     if (mass1[a] > mass2[b] && b < mass2.Length)
  17.                         merged[i] = mass2[b++];
  18.                     else
  19.                         merged[i] = mass1[a++];
  20.                 else
  21.                     if (b < mass2.Length)
  22.                         merged[i] = mass2[b++];
  23.                     else
  24.                         merged[i] = mass1[a++];
  25.             }
  26.             return merged;
  27.         }
  28.  
  29.     static void Main(string[] args)
  30.         {
  31.               Int32[] arr = new Int32[100];
  32.               //заполняем массив случайными числами
  33.               Random rd = new Random();
  34.               for(Int32 i = 0; i < arr.Length; ++i) {
  35.                  arr[i] = rd.Next(1, 101);
  36.               }
  37.               System.Console.WriteLine("The array before sorting:");
  38.               foreach (Int32 x in arr)
  39.               {
  40.                  System.Console.Write(x + " ");
  41.               }
  42.               //сортировка
  43.  
  44.               arr = Merge_Sort(arr);
  45.  
  46.               System.Console.WriteLine("\n\nThe array after sorting:");
  47.               foreach (Int32 x in arr)
  48.               {
  49.                  System.Console.Write(x + " ");
  50.               }
  51.               System.Console.WriteLine("\n\nPress the <Enter> key");
  52.               System.Console.ReadLine();
  53.         }

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


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

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

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

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

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

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