Java归并排序结果不对应

归并排序出现错误,

public class demo1 {
    static int[] a=new int[11000];
    public void merge_sort(int q[], int l, int r){
        if (l == r) return;//若数组中只有一个或没有数,就直接返回了
        int mid = (l+r)>>1;
        merge_sort(q, l, mid);
        merge_sort(q,mid +1 ,r);
        int k = l, i = l, j = mid + 1;
        int temp[] = new int[q.length];
        while (i<=mid && j<=r){
            if (q[i] < q[j]) temp[k++] = q[i++];
            else temp[k++] = q[j++];
        }
        while (i <= mid) temp[k++] = q[i++];
        while (j <= r) temp[k++] = q[j++];
        for (i = 1, j = 0; i <= r; i++, j++) q[i] = temp[j];
    }

    public static void main(String[] args) {
        int []qwe = {3,2,1,1};
        demo1 demo = new demo1();
        demo.merge_sort(qwe,0, qwe.length-1);
        System.out.println(Arrays.toString(qwe));
    }

}

运行结果却是:

img


求解惑

import java.util.Arrays;
public class HelloWorld {
public void merge_sort(int q[], int l, int r){
    if (l == r) {
        return;
    }
    int mid = (l+r)>>1;
    merge_sort(q, l, mid);
    merge_sort(q, mid + 1, r);

    int temp[] = new int[r-l+1];
    int i = l, j = mid + 1, k = 0;

    while (i <= mid && j <= r) {
        if (q[i] < q[j]) {
            temp[k++] = q[i++];
        } else {
            temp[k++] = q[j++];
        }
    }

    while (i <= mid) {
        temp[k++] = q[i++];
    }

    while (j <= r) {
        temp[k++] = q[j++];
    }

    for (int p = 0; p < temp.length; p++) {
        q[l+p] = temp[p];
    }
}

public static void main(String[] args) {
    int []qwe = {3,2,1,1};
    HelloWorld demo = new HelloWorld();
    demo.merge_sort(qwe, 0, qwe.length-1);
    System.out.println(Arrays.toString(qwe));
}
}

在线测试通过(因为在线平台的限制,我把主类类名略微修改了。)

img