java - 合并排序 - 我的代码有什么问题?

标签 java mergesort

我的合并排序代码遇到问题。每次我运行它时,我都会遇到 IndexOutOfBounds 异常的问题,但我似乎无法弄清楚为什么......这是我们的教授(已知会犯错误)生成的代码......任何人都发现问题

public static <T extends Comparable<T>> void mergeSort(T[] array, int first, int last)
{
    if(first<last)
    {
        int mid = (first+last)/2;
        mergeSort(array, first, mid);
        mergeSort(array, mid+1, last);
        merge(array, first, mid, last);
    }
}

public static <T extends Comparable<T>> void mergeSort(T[] array, int last)
{
    int first = 0;
    if(first<last)
    {
        int mid = (first+last)/2;
        mergeSort(array, first, mid);
        mergeSort(array, mid+1, last);
        merge(array, first, mid, last);
    }
}
public static <T extends Comparable<T>> void merge(T[] array, int first, int mid, int last)
{
    int maxSize = array.length;
    T[] tempA = (T[]) new Comparable[maxSize];

    int first1 = first;
    int last1 = mid;
    int first2 = mid+1;
    int last2 = last;

    int index = first1;
    while((first1<=last1) && (first2<=last2))
    {
        if(array[first1].compareTo(array[first2])<0)
        {
            tempA[index] = array[first1];
            first1++;
        }
        else
        {
            tempA[index] = array[first2];
            first2++;
        }
        index++;
    }
    while(first1<=last1)
    {
        tempA[index]=array[first1];
        first1++;
        index++;
    }
    while(first2<=last2)
    {
        tempA[index]=array[first2];
        first2++;
        index++;
    }
    for(index=first; index<=last;++index)
    {
        array[index]=tempA[index];
    }
}

最佳答案

阅读您的代码,似乎 last 变量被用作代码中的索引。

这就是为什么您无法将其作为大小传递给 mergeSort 方法,而必须传递 array.length - 1

  • array.length 是数组的大小
  • array.length - 1 是数组的最后一个索引

关于java - 合并排序 - 我的代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19552628/

相关文章:

Java API 访问加密狗?

java - 如果为 ArrayList<Interface> 定义,则该方法不能应用于 ArrayList<ObjectImplementsInterface>

c++14 - 归并排序实现输出错误结果

c++ - C++ 中的非递归归并排序

python - 优化嵌套在 IF 条件中的 while 循环

java - 使用 JavaMail 发送带有内联图像的 HTML 电子邮件 - 图像加载速度慢?

java - 如何将 Stream<Map<String, Map<String, String>>> 合并为一个 Map<String, Map<String, String>>?

java - 使用 Java 存储多个对象

java - 并行编程。计算()方法,java

c - 错误: array initializer must be an initializer list or wide string literal in C Merge Sort program