Сортировка слиянием - 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");
        }
    }

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


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

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

13   голосов , оценка 3.923 из 5
Похожие ответы