我遵循了一篇关于合并排序算法的Java教程,结果显示0000002468.

我输入的数字是1,2,3...9,0. 它应该按升序排序. 我也仔细判断了一下教程,没有发现任何问题. 我自己也解不出来,因为我真的不明白. 教程由BroCode btw编写.

代码:

class m{
    public static void main(String[]args){
        int array[] = {8,4,5,3,2,7,1,9,0,6};

        mergeSort(array);
    
    for(int i =0;i<array.length;i++){
        System.out.print(array[i] + "");

    }

}
private static void mergeSort(int[]array){

    int length = array.length;
    if(length<=1)return;//base case
    int middle = length/2;
    int leftArray[] = new int[middle];
    int rightArray[] = new int[length-middle];
    int i=0;//left array
    int j = 0;//right array
    for(;i<length;i++){
        if(i<middle){
            leftArray[i] = array[i];

        }else{
            rightArray[j] = array[i];
        }
    }mergeSort(leftArray);
     mergeSort(rightArray);
     merge(leftArray,rightArray,array);

    }

    private static void merge(int[]leftArray,int[]rightArray,int[]array){
        int leftSize = array.length/2;
        int rightSize = array.length-leftSize;
        int i=0,l=0,r=0;

        // check conditions for merging

        while(l<leftSize && r<rightSize){
            if(leftArray[l]<rightArray[r]){
                array[i] = leftArray[l];
                i++;
                l++;
            }else{
                array[i] = rightArray[r];
                i++;
                r++;
            }
        }
        while(l<leftSize){
            array[i] = leftArray[l];
            i++;
            l++;

        }
        while(r<rightSize){
            array[i] = rightArray[r];
            i++;
            r++;
        }
    }

}

推荐答案

在将原始数组分解为2时,您忘记了增加j索引.

else{
     rightArray[j++] = array[i];
}

在您的代码中,您只是一次又一次地设置和替换数组的第一个元素rightArray.

Java相关问答推荐

如何在Docker容器中使用wireock—Webhooks阻止请求?

Springdoc Whitelabel Error Page with Spring V3

参数值[...]与预期类型java.util.Date不匹配

JDK22执行repackage of goal org. springframework. boot:spring—boot—maven—plugin:3.2.3:repackage failed:unsupported class file major version 66—>

如何以干净的方式访问深度嵌套的对象S属性?

如何使用AWS CLI从S3存储桶中的所有对象中删除用户定义的元数据?

JavaFX Maven Assembly插件一直打包到错误的JDK版本

解释左移在Java中的工作原理

将响应转换为带值的键

用OSQL创建索引

Java中将文本拆分为数字或十进制数字和字符串

搜索列表返回多个频道

将stringBuilder + forloop转换为stream + map

插入中的JOOQ序列,设置为VS值

Oracle中从JSON中提取和插入数据

Java中的发布/订阅-Long Live和Short Live Publisher,哪种方法是正确的?

使用同步方法中的新线程调用同步方法

如何设置默认序列生成器分配大小

Spring Boot Security-每个端点都被403禁止,Spring记录一个BasicErrorController#错误(HttpServlet请求)

[Guice/MissingImplementation]:未绑定任何实现