薯片加可乐 2017-03-06 08:51 采纳率: 0%
浏览 975

我写的归并排序请问在哪里出问题了?一直找不到哪里错了

 import java.util.*;

public class Solution {
    public int[] mergeSort(int[] A, int n) {
        sort(A,0,n-1);
        return A;
    }

    public void sort(int[] data, int left, int right) {
        if(left<right) {
            int middle = (left+right)/2;
            sort(data, left, middle);
            sort(data, middle+1, right);
            merge(data, left, middle, right);
        }
    }

    public void merge(int[] data, int left, int middle, int right) {
        int leftpos = left;
        int leftend = middle;
        int rightpos = middle+1;
        int rightend = right;

        int[] tmp = new int[rightend-leftpos+1];

        for(int i=leftpos;i<tmp.length;i++) {
            if(leftpos<=leftend&&rightpos<=rightend) {
                if(data[leftpos]<data[rightpos]) {
                    tmp[i] = data[leftpos];
                    leftpos++;
                }else {
                    tmp[i] = data[rightpos];
                    rightpos++;
                }
            }else if(leftpos<=leftend) {
                tmp[i] = data[leftpos];
                leftpos++;
            }else if(rightpos<=rightend) {
                tmp[i] = data[rightpos];
                rightpos++;
            }
        }

        for(int j=left;j<tmp.length;j++) {
            data[j] = tmp[j];
        }
    }
}
  • 写回答

5条回答 默认 最新

  • Tiger_Zhao 2017-03-06 09:01
    关注

    1)for(int i=leftpos;i<tmp.length;i++) {
    i是tmp数组的下标,leftpos是data数组的下标,毫无关系啊。
    2)data[j] = tmp[j];
    j能即做data的下标又做tmp的下标?

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败