Сортировка слиянием - C# (185592)

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

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

Как найти left and right
Листинг программы
  1. public static void MergeSort(int[] input, int left, int right)
  2. {
  3. if (left < right)
  4. {
  5. int middle = (left + right) / 2;
  6. MergeSort(input, left, middle);
  7. MergeSort(input, middle + 1, right);
  8. //Merge
  9. int[] leftArray = new int[middle - left + 1];
  10. int[] rightArray = new int[right - middle];
  11. Array.Copy(input, left, leftArray, 0, middle - left + 1);
  12. Array.Copy(input, middle + 1, rightArray, 0, right - middle);
  13. int i = 0;
  14. int j = 0;
  15. for (int k = left; k < right + 1; k++)
  16. {
  17. if (i == leftArray.Length)
  18. {
  19. input[k] = rightArray[j];
  20. j++;
  21. }
  22. else if (j == rightArray.Length)
  23. {
  24. input[k] = leftArray[i];
  25. i++;
  26. }
  27. else if (leftArray[i] <= rightArray[j])
  28. {
  29. input[k] = leftArray[i];
  30. i++;
  31. }
  32. else
  33. {
  34. input[k] = rightArray[j];
  35. j++;
  36. }
  37. }
  38. }
  39. }

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

textual
Листинг программы
  1.    class Program
  2.     {
  3.         static void MixDataUp(ref int[] x, Random rdn)
  4.         {
  5.             for (int i = 0; i <= x.Length - 1; i++)
  6.             {
  7.                 x[i] = (int)(rdn.NextDouble() * x.Length);
  8.             }
  9.         }
  10.         public static void DisplayElements(ref int[] xArray, char status, string sortname)
  11.         {
  12.             if (status == 'a')
  13.                 Console.WriteLine("After sorting using algorithm: " + sortname);
  14.             else
  15.                 Console.WriteLine("Before sorting");
  16.             for (int i = 0; i <= xArray.Length - 1; i++)
  17.             {
  18.                 if ((i != 0) && (i % 10 == 0))
  19.                     Console.Write("\n");
  20.                 Console.Write(xArray[i] + " ");
  21.             }
  22.             Console.ReadLine();
  23.         }
  24.         public static void MergeSort(ref int[] x, int left, int right)
  25.         {
  26.             if (left < right)
  27.             {
  28.                 int middle = (left + right) / 2;
  29.                 MergeSort(ref x, left, middle);
  30.                 MergeSort(ref x, middle + 1, right);
  31.                 int middle1 = middle + 1;
  32.                 int oldPosition = left;
  33.                 int size = right - left + 1;
  34.                 int[] temp = new int[size];
  35.                 int i = 0;
  36.  
  37.                 while (left <= middle && middle1 <= right)
  38.                 {
  39.                     if (x[left] <= x[middle1])
  40.                         temp[i++] = x[left++];
  41.                     else
  42.                         temp[i++] = x[middle1++];
  43.                 }
  44.                 if (left > middle)
  45.                     for (int j = middle1; j <= right; j++)
  46.                         temp[i++] = x[middle1++];
  47.                 else
  48.                     for (int j = left; j <= middle; j++)
  49.                         temp[i++] = x[left++];
  50.                 Array.Copy(temp, 0, x, oldPosition, size);
  51.             }
  52.         }
  53.         static void Main(string[] args)
  54.         {
  55.             const int nItems = 20;
  56.             Random rdn = new Random(nItems);
  57.             int[] xdata = new int[nItems];
  58.             MixDataUp(ref xdata, rdn);
  59.             DisplayElements(ref xdata, 'b', "");
  60.             MergeSort(ref xdata, 0, xdata.Length - 1);
  61.             DisplayElements(ref xdata, 'a', "MergeSort");
  62.             Console.WriteLine("\n\n");
  63.         }
  64.     }

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


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

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

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

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

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

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