Сортировка слиянием - C# (185592)
Формулировка задачи:
Как найти left and right
Листинг программы
- public static void MergeSort(int[] input, int left, int right)
- {
- if (left < right)
- {
- int middle = (left + right) / 2;
- MergeSort(input, left, middle);
- MergeSort(input, middle + 1, right);
- //Merge
- int[] leftArray = new int[middle - left + 1];
- int[] rightArray = new int[right - middle];
- Array.Copy(input, left, leftArray, 0, middle - left + 1);
- Array.Copy(input, middle + 1, rightArray, 0, right - middle);
- int i = 0;
- int j = 0;
- for (int k = left; k < right + 1; k++)
- {
- if (i == leftArray.Length)
- {
- input[k] = rightArray[j];
- j++;
- }
- else if (j == rightArray.Length)
- {
- input[k] = leftArray[i];
- i++;
- }
- else if (leftArray[i] <= rightArray[j])
- {
- input[k] = leftArray[i];
- i++;
- }
- else
- {
- input[k] = rightArray[j];
- j++;
- }
- }
- }
- }
Решение задачи: «Сортировка слиянием»
textual
Листинг программы
- class Program
- {
- static void MixDataUp(ref int[] x, Random rdn)
- {
- for (int i = 0; i <= x.Length - 1; i++)
- {
- x[i] = (int)(rdn.NextDouble() * x.Length);
- }
- }
- public static void DisplayElements(ref int[] xArray, char status, string sortname)
- {
- if (status == 'a')
- Console.WriteLine("After sorting using algorithm: " + sortname);
- else
- Console.WriteLine("Before sorting");
- for (int i = 0; i <= xArray.Length - 1; i++)
- {
- if ((i != 0) && (i % 10 == 0))
- Console.Write("\n");
- Console.Write(xArray[i] + " ");
- }
- Console.ReadLine();
- }
- public static void MergeSort(ref int[] x, int left, int right)
- {
- if (left < right)
- {
- int middle = (left + right) / 2;
- MergeSort(ref x, left, middle);
- MergeSort(ref x, middle + 1, right);
- int middle1 = middle + 1;
- int oldPosition = left;
- int size = right - left + 1;
- int[] temp = new int[size];
- int i = 0;
- while (left <= middle && middle1 <= right)
- {
- if (x[left] <= x[middle1])
- temp[i++] = x[left++];
- else
- temp[i++] = x[middle1++];
- }
- if (left > middle)
- for (int j = middle1; j <= right; j++)
- temp[i++] = x[middle1++];
- else
- for (int j = left; j <= middle; j++)
- temp[i++] = x[left++];
- Array.Copy(temp, 0, x, oldPosition, size);
- }
- }
- static void Main(string[] args)
- {
- const int nItems = 20;
- Random rdn = new Random(nItems);
- int[] xdata = new int[nItems];
- MixDataUp(ref xdata, rdn);
- DisplayElements(ref xdata, 'b', "");
- MergeSort(ref xdata, 0, xdata.Length - 1);
- DisplayElements(ref xdata, 'a', "MergeSort");
- Console.WriteLine("\n\n");
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д