归并排序的数组复制问题

问题遇到的现象和发生背景

归并排序的数组复制,每次合并的时候复制和先排好序最后在sort函数里复制得到的值不一样

问题相关代码,请勿粘贴截图

这是错误的代码(即排序好再复制) public static void sort(int[] arr) {

int[] toarr = new int [arr.length];
        sort(arr, toarr, 0, arr.length-1);
        /*
         * for(int i = 0; i < toarr.length; i++) { arr[i] = toarr[i]; }
         */
    }

这是正确的代码 (每次排序都会复制一次)

public static void merge(int[] arr, int[] toarr, int left, int right) {
        int mid = (left + right) / 2;
        int i = left;
        int k = left;
        int j = mid + 1;
        while (i <= mid &&j <= right) {
            if(arr[i] <= arr[j]) {
                toarr[k++] = arr[i];
                i++;
            }
            else {
                toarr[k++] = arr[j];
                j++;
            }
        }
        while (i <= mid) {
            toarr[k++] = arr[i++];
        }
        while (j <= right) {
            toarr[k++] = arr[j++];
        }
        /*
         * while (left <= right) { arr[left] = toarr[left]; left++; }
         */
    }

运行结果及报错内容

错误结果(根本就没有排序)
3
1
4
2
7
6
8
9
5

我的解答思路和尝试过的方法
我想要达到的结果

错误代码是个递归???sort函数内调用的sort函数原型怎么定义的啊