鹿又笑 2023-04-05 09:19 采纳率: 90%
浏览 16
已结题

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


求解惑

  • 写回答

1条回答 默认 最新

  • threenewbee 2023-04-05 09:36
    关注
    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月13日
  • 已采纳回答 4月5日
  • 创建了问题 4月5日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助