Java 合并排序算法有问题吗

Java 合并排序算法有问题吗,java,algorithm,sorting,merge,mergesort,Java,Algorithm,Sorting,Merge,Mergesort,我目前正在尝试将mergesort算法从伪代码级别转录到java中的工作实现。这是我的密码 public int[] merge(int a[], int b[]) { int c[] = new int[a.length + b.length]; int i = 0, j = 0; for (int k = 0; k < c.length; k++) { if (a[i] <= b[j]) {

我目前正在尝试将mergesort算法从伪代码级别转录到java中的工作实现。这是我的密码

public int[] merge(int a[], int b[]) {
        int c[] = new int[a.length + b.length];
        int i = 0, j = 0;
        for (int k = 0; k < c.length; k++) {
            if (a[i] <= b[j]) {
                c[k] = a[i++];
            } else {
                c[k] = b[j++];
            }
        }
        return c;
    }
public int[]合并(int a[],int b[]{
int c[]=新int[a.length+b.length];
int i=0,j=0;
for(int k=0;k如果(a[i]您打算实现它的合并算法更详细一些,下面您将找到一个正确的实现:

public int[] merge(int a[], int b[]) {

    int i = 0, j = 0, k = 0;
    int m = a.length, n = b.length;
    int[] c = new int[m + n];

    // Merge to the end of one of the source arrays
    while (i < m && j < n) {
        if (a[i] <= b[j]) {
            c[k] = a[i];
            i++;
        } else {
            c[k] = b[j];
            j++;
        }
        k++;
    }

    // Determine which source array has elements remaining and
    // append those to the result array
    if (i < m) {
        for (int p = i; p < m; p++) {
            c[k] = a[p];
            k++;
        }
    } else {
        for (int p = j; p < n; p++) {
            c[k] = b[p];
            k++;
        }
    }

    return c;

}
public int[]合并(int a[],int b[]{
int i=0,j=0,k=0;
int m=a.长度,n=b.长度;
int[]c=新的int[m+n];
//合并到一个源数组的末尾
而(i如果(a[i],这显然会产生越界异常,因为您没有跟踪
a
b
数组的长度。由于
k=a+b
a
b
总是小于
k
,因此出现异常

当您应用此检查时,请记住复制剩余的项目,无论它们是
a[]
还是
b[]
,以将它们复制到
c[]
。请参见此-

for(;i<a.length;i++)
    c[k++] = a[i++];

for(;j<b.length;b++)
    c[k++] = b[j++];

for(;i考虑当
a[a.length-1]
b[0]
:您运行整个
a
数组,将
i
增加到
a.length
,然后尝试将
a
中不存在的元素与
b
的第一个元素进行比较。您需要主动检查一个数组的结尾,一旦发生这种情况,只需运行另一个。@dlev关于c的说法是正确的因为,虽然这根本不是边缘情况。不管发生什么情况,你都会先用一个数组完成另一个数组,当这种情况发生时,你需要能够从另一个数组完成填充。@MarkPeters的确,我并不是有意暗示这是边缘情况。我只是想用一个“极端”的例子来说明这一点。