1

Тема: Сортування злиттям

Як знайти 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++;
            }
        }
    }
}

2

Re: Сортування злиттям

Як знайти left and right?
> При "зовнішньому" виклику функції MergeSort left і righ це перший і останній елементи масиву відповідно.

Подякували: koala, Mister2

3

Re: Сортування злиттям

Параметр left, до речі, взагалі не потрібен. Достатньо передавати тільки input та count з відповідним зсувом.

Подякували: Arete, Mister, leofun013