编写一个归并排序的伪代码算法。
MergeSort(A, startIndex, endIndex):
    // 如果数组中只有一个元素，返回
    if startIndex == endIndex:
        return

    middleIndex = (startIndex + endIndex) / 2

    // 对数组的左半部分进行排序
    MergeSort(A, startIndex, middleIndex)

    // 对数组的右半部分进行排序
    MergeSort(A, middleIndex + 1, endIndex)

    // 合并两个排序好的数组
    Merge(A, startIndex, endIndex)

Merge(A, startIndex, endIndex):
    middleIndex = (startIndex + endIndex) / 2
    leftIndex = startIndex
    rightIndex = middleIndex + 1

    // 用于存储排序好的数组的临时数组
    tempArray[]

    // 遍历数组的两个半部分
    for i in range(startIndex, endIndex+1):
        // 如果左半部分的遍历已经完毕，从右半部分添加
        if leftIndex > middleIndex:
            tempArray[i] = A[rightIndex]
            rightIndex++

        // 如果右半部分的遍历已经完毕，从左半部分添加
        else if rightIndex > endIndex:
            tempArray[i] = A[leftIndex]
            leftIndex++

        // 比较当前元素并添加较小的元素
        else if A[leftIndex] < A[rightIndex]:
            tempArray[i] = A[leftIndex]
            leftIndex++
        else:
            tempArray[i] = A[rightIndex]
            rightIndex++

    // 将临时数组复制回A
    for i in range(startIndex, endIndex+1):
        A[i] = tempArray[i]