java - Arraycopy 使我的程序崩溃

标签 java recursion mergesort arrays

我正在做一项家庭作业,我必须根据我们书籍的作者伪代码实现 MergeSort。 (算法基础,第 4 版,由 Neapolitan 和 Naimipour 合着)。

我在主方法中调用 mergeSort,其中 int n 是数组的长度,S[] 是需要排序的数组。 S[] 已经填充了 1 到 999 之间的随机数。我的程序在合并中的最后一个 arraycopy 崩溃,我不确定为什么会这样,我已经尝试在 netbeans 中进行调试。我觉得这可能是一个我看不到的愚蠢错误。任何帮助都会很棒。提前致谢。

public static void mergesort (int n, int S[])
   {
      if(n>1){
         final int h=n/2, m=n-h;
         int U[] = new int[h];
         int V[] = new int[m];
         System.arraycopy(S, 0, U, 0, h);
         System.arraycopy(S, h, V, 0, m);
         mergesort(h, U);
         mergesort(m, V);
         merge(h, m, U, V, S);
      }
   }
   public static void merge(int h, int m, final int U[], final int V[], final int S[])
   {
      int i=0, j=0, k=0;
      while(i<h && j<m){
         if(U[i]<V[j]) {
            S[k] = U[i];
            i++;
         }
         else {
            S[k]=V[j];
            j++;
         }
         k++;
      }
      if(i>h)
         System.arraycopy(V, j, S, k, h+m);
      else
         System.arraycopy(U, i, S, k, h+m);
   }

编辑:我意识到我在合并中有几个小错误。最大的变化是将比较更改为使用等号,并且还了解 arraycopy 中的长度是我要复制的元素数。这是我的合并方法。合并排序保持不变。

   public static void merge(int h, int m, final int U[], final int V[], int S[])
   {
      int i=0, j=0, k=0;
      while(i<h && j<m){
         if(U[i]<V[j]) {
            S[k] = U[i];
            i++;
         }
         else {
            S[k]=V[j];
            j++;
         }
         k++;
      }
      if(i>=h)
         System.arraycopy(V, j, S, k, m-j);
      else
         System.arraycopy(U, i, S, k, h-i);
   }

感谢您的帮助。

最佳答案

测试过。它作为 IndexOutOfBounds。 原因是您在 ArrayCopy 中给出的长度大于源数组的计数。

关于java - Arraycopy 使我的程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9253096/

相关文章:

python - 为什么 Python 有最大递归深度?

c++ - `std::list<>::sort()` - 为什么突然切换到自上而下的策略?

javascript - 为什么这个 1,000,000 的合并排序的实现要花这么长时间?

algorithm - 想要以不同的方式实现归并排序算法

java - 分配 AsyncTask 返回的值

java - 是否有离线工作的 Java 翻译库?

java - 破解编码面试第五版,9.10

具有递归功能的中国环

java - 如何使用Java获取客户端的LAN IP?

java - BitSet 的 JSON 序列化不起作用