合并排序索引错误

时间:2014-03-01 02:56:06

标签: java mergesort

我有两个数组,一个字符串和一个int,我想通过int数组对数组进行排序,而字符串数组必须与int数组对应,所以如果我移动一个int我需要移动一个字符串或副verca。我现在拥有它的方式让我的异常超出范围。

public static void mergeSort(int[] arr,String[] str) {
    if (arr.length > 1 && str.length > 1) {
        int[] left = Arrays.copyOfRange(arr, 0, arr.length/2);
        int[] right = Arrays.copyOfRange(arr, left.length, arr.length);
        String[] Sl = Arrays.copyOfRange(str, 0, str.length/2);
        String[] Sr = Arrays.copyOfRange(str, Sl.length, str.length);

        mergeSort(right, Sr);
        mergeSort(left, Sl);
        merge(right, left, Sr, Sl,arr, str);
    }
}

public static void merge(int[] left, int[] right,
                         String[] Sleft, String[] Sright,
                         int[] orig, String[] sorig) {
    int i = 0;
    int j = 0;
    int f = 0;
    int tots = right.length + left.length;
    while (f < tots) {
        if (i < left.length && j < right.length) {
            if (left[i] < right[j]) {
                orig[f] = left[i];
                sorig[f] = Sleft[i];
                i++;
                f++;
            } else if(left[i] > right[j]) {
                orig[f] = right[j];
                sorig[f] = Sright[j];
                j++;
                f++;
            }
        } else if (i >= left.length) {
            orig[f] = left[i];
            sorig[f] = Sleft[i];
            f++;
            j++;
        } else if (j >= left.length) {
            orig[f] = right[j];
            sorig[f] = Sright[j];
            f++;
            i++;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

问题在于:

} else if (i >= left.length) {
    orig[f] = left[i];

就这一点而言,i总是超出界限,因为你专门测试它是否只是之前的那一行。