Сортировка слиянием - 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"); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д