Please comment on time and space efficiency.

    using System;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    
    namespace JobInterviewTests
    {
        [TestClass]
        public class MergeSortUnitTest
        {
            [TestMethod]
            public void MergeTest()
            {
                int[] array = new int[] { 5, 10, 1, 4, 2, 3, 7 };
                SortHalf(array, 0, array.Length-1); 
    
                int[] expectedOutput = new[] { 1, 2, 3, 4, 5, 7, 10 };
                CollectionAssert.AreEqual(expectedOutput, array);
            }
            private void SortHalf(int[] array, int startIndex, int endIndex)
            {
                int mid;
                if (endIndex > startIndex)
                {
                    mid = (endIndex + startIndex) / 2;
                    SortHalf(array, startIndex, mid);
                    SortHalf(array, mid + 1, endIndex);
                    DoMerge(array, startIndex,mid+1, endIndex);
                }
            }
    
            private void DoMerge(int[] array, int startIndex, int mid, int endIndex)
            {
                int[] temp = new int[array.Length];
                int i, start, numOfElements, position;
                start = mid - 1;
                position = startIndex;
                numOfElements = endIndex - startIndex + 1;
                while((startIndex <= start)&& (mid <= endIndex))
                {
                    if(array[startIndex] <= array[mid])
                    {
                        temp[position++] = array[startIndex++];
                    }
                    else
                    {
                        temp[position++] = array[mid++];
                    }
                }
                while(startIndex <= start)
                {
                    temp[position++] = array[startIndex++];
                }
    
                while(mid <= endIndex)
                {
                    temp[position++] = array[mid++];
                }
    
                for (i = 0; i < numOfElements; i++)
                {
                    array[endIndex] = temp[endIndex];
                    endIndex--;
                }
    
            }
        }
    }