【问题标题】:MergeSort gives StackOverflow errorMergeSort 给出 StackOverflow 错误
【发布时间】:2013-04-14 17:12:04
【问题描述】:

这是 mergeSort 的代码,这在第 53 行和第 54 行给出了 stackoverflow 错误(mergeSort(l,m); 和 mergeSort(m,h);) 任何帮助都将被视为非常有价值,请帮助我,我无能为力,谢谢。

package codejam;

public class vector {
    static int[] a;
    static int[] b;
    public static void main(String[] args) {
     int[] a1 = {12,33,2,1};
     int[] b1 = {12,333,11,1};
        mergeSort(0,a1.length);
        a1=b1;
        mergeSort(0,b1.length);
        for (int i = 0; i < a1.length; i++) {
            System.out.println(a[i]);
        }

    }

    public static void merge(int l,int m,int h) {
        int n1=m-l+1;
        int n2 = h-m+1;
        int[] left = new int[n1];
        int[] right = new int[n2];
        int k=l;
        for (int i = 0; i < n1 ; i++) {
            left[i] = a[k];
            k++;
        }
        for (int i = 0; i < n2; i++) {
            right[i] = a[k];
            k++;
        }
        left[n1] = 100000000;
        right[n1] = 10000000;
        int i=0,j=0;
        for ( k =l ; k < h; k++) {
            if(left[i]>=right[j])
            {
                a[k] = right[j];
                j++;
            }
            else
            {
                a[k] = left[i];
                i++;
            }
        }
    }

     public static void mergeSort(int l,int h) {
     int m =(l+h)/2;
     if(l<h)
     {
         mergeSort(l,m);
         mergeSort(m,h);
         merge(l,m,h);;
     }

    }
}

【问题讨论】:

    标签: algorithm sorting merge stack-overflow mergesort


    【解决方案1】:

    以下是参数 l=0 和 h=4 的 mergeSort 函数的递归迭代表

    当 l 的值为 0 且 h 的值为 1 时,表达式计算 m 值,结果为 0 但我们正在检查条件 h 仍然为 1 所以 0

    【讨论】:

      【解决方案2】:
      import java.lang.*;
      import java.util.Random;
      
      public class MergeSort {
      
          public static int[] merge_sort(int[] arr, int low, int high ) {
      
              if (low < high) {
                  int middle = low + (high-low)/2;
                  merge_sort(arr,low, middle);
                  merge_sort(arr,middle+1, high);
                  arr = merge (arr,low,middle, high);
              }           
                  return arr;
          }
      
          public static int[] merge(int[] arr, int low, int middle, int high) {
      
              int[] helper = new int[arr.length];
              for (int i = 0; i <=high; i++){
                helper[i] = arr[i];
              }
              int i = low;
              int j = middle+1;
              int k = low;
              while ( i <= middle && j <= high) {
                  if (helper[i] <= helper[j]) {
                      arr[k++] = helper[i++];
                  } else {
                      arr[k++] = helper[j++];
                  }
      
              }
      
              while ( i <= middle){
                  arr[k++] = helper[i++];
              }
              while ( j <= high){
                  arr[k++] = helper[j++];
              }
      
              return arr;
          }
      
          public static void printArray(int[] B) {
              for (int i = 0; i < B.length ; i++) {
                  System.out.print(B[i] + " ");
              }
              System.out.println("");
          }
      
          public static int[] populateA(int[] B) {
              for (int i = 0; i < B.length; i++) {
                  Random rand = new Random();
                  B[i] =  rand.nextInt(20);
              }
              return B;
          }
      
          public static void main(String[] args) {
              // TODO Auto-generated method stub
              int A[] = new int[10];
              A = populateA(A);
              System.out.println("Before sorting");
              printArray(A);
      
              A = merge_sort(A,0, A.length -1);
      
              System.out.println("Sorted Array");
              printArray(A);
      
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-13
        • 2017-05-17
        • 1970-01-01
        • 1970-01-01
        • 2021-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多