Merge sort C# Implementation
Inside of your copyArray you should not have the cnt variable separate from the for loop, you should just include it in the declaration. The name of that Method should be in PascalCase not it camelCase.  You should also give operators some space (ie [end - start])

so this:


   private int[] copyArray(int[] A, int start, int end)
    {

        int[] result = new int[end-start];

        int cnt = 0;
        for (int i = start; i &lt; end; i++)
        {
            result[cnt] = A[i];
            cnt++;
        }

        return result;
    }



would become this

private int[] CopyArray(int[] A, int start, int end)
{
    int[] result = new int[end - start];
    for (int i = start, cnt = 0; i &lt; end; i++, cnt++)
    {
        result[cnt] = A[i];
    }
    return result;
}


you can remove the cnt++ from inside the loop and just add it to the for loop declaration.



Variables should be camelCase 


 int[] LeftArray = copyArray(data,0,length);
 int[] RightArray = copyArray(data, length,data.Length);



These should be 

 int[] leftArray = CopyArray(data,0,length);
 int[] rightArray = CopyArray(data, length,data.Length);


And 


public int[] merge(int[] right, int[] left)



should be 

public int[] Merge(int[] right, int[] left)


Because Methods should always be in PascalCase

And 


int cntright = 0;
int cntleft = 0;



should be 

int cntRight = 0;
int cntLeft = 0;


for the same reason