Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何实现合并排序?_Java_Sorting_Mergesort - Fatal编程技术网

Java 如何实现合并排序?

Java 如何实现合并排序?,java,sorting,mergesort,Java,Sorting,Mergesort,我试图实现一个递归mergesort,但该方法只在排序向量中写入零。这是我的密码。在main函数中,我只是将值读入一个向量,并将其作为参数传递给mergesort。你知道我做错了什么吗?多谢各位 public static void mergesort(int [] v){ int mid=v.length/2; if( v.length < 2) return; int l[]=new int [mid]; int r[] = new int [v.length-mid];

我试图实现一个递归mergesort,但该方法只在排序向量中写入零。这是我的密码。在main函数中,我只是将值读入一个向量,并将其作为参数传递给mergesort。你知道我做错了什么吗?多谢各位

public static void mergesort(int []  v){
int mid=v.length/2;

if( v.length < 2)
    return;

int l[]=new int [mid];
int r[] = new int [v.length-mid];

for(int i=0; i<mid-1; i++)
    l[i]=v[i];

for(int i=mid; i<v.length-1; i++)
    r[i-mid]=v[i];

mergesort(l);
mergesort(r);
mergesort(l,r,v); 


}

public static void mergesort(int [] l, int [] r, int [] v){
int i=0, j=0, k=0;

while(i< l.length && j< r.length){

    if(l[i] <= r[j]){
    v[k]=l[i];
    i++;
    }
    else{
    v[k]=r[j];
    j++;
    }
k++;
}

while(i < l.length){
    v[k]=l[i];
    i++;
    k++;
}

while(j< r.length){
    v[k]=r[j];
    j++;
    k++;
}
}
publicstaticvoidmergesort(int[]v){
int mid=v.length/2;
如果(v.长度<2)
返回;
int l[]=新int[mid];
int r[]=新int[v.length-mid];

对于(int i=0;i,算法中有两个错误

错误1:

while (i < r.length && j < r.length) {
    if (l[i] <= r[j]) {
        v[k] = l[i];
        i++;
    } else {
        v[k] = r[j];
        j++;
    }
    k++;
}
while(i如果(l[i]假设您输入一个大小为2的向量,那么根据您的代码

mid=1;

for(int i=0;i<mid-1;i++)

// here   i < (1-1)   which will never execute

    l[i]=v[i];
mid=1;
对于(int i=0;i
for (int i = 0; i <= mid - 1; i++)
    l[i] = v[i];

for (int i = mid; i <= v.length - 1; i++)
    r[i - mid] = v[i];
public static void mergesort(int []  v) {
    int mid = v.length / 2;

    if ( v.length < 2)
        return;

    int l[] = new int [mid];
    int r[] = new int [v.length - mid];

    for (int i = 0; i <= mid - 1; i++)
        l[i] = v[i];

    for (int i = mid; i <= v.length - 1; i++)
        r[i - mid] = v[i];

    mergesort(l);
    mergesort(r);
    mergesort(l, r, v);
}

public static void mergesort(int [] l, int [] r, int [] v) {
    int i = 0, j = 0, k = 0;

    while (i < l.length && j < r.length) {
        if (l[i] <= r[j]) {
            v[k] = l[i];
            i++;
        } else {
            v[k] = r[j];
            j++;
        }
        k++;
    }

    while (i < l.length) {
        v[k] = l[i];
        i++;
        k++;
    }

    while (j < r.length) {
        v[k] = r[j];
        j++;
        k++;
    }
}
mid=1;

for(int i=0;i<mid-1;i++)

// here   i < (1-1)   which will never execute

    l[i]=v[i];