【问题标题】:Merge Sort code is not working and showing exception合并排序代码不起作用并显示异常
【发布时间】:2014-04-22 10:33:30
【问题描述】:
public static void Merge(int[] arr,int p,int q,int r ) 
{
    int n1 = q-p;
    int n2 = r-q;
    int[] L=new int[n1];
    int[] R = new int[r-n2];

    for (int i = 0; i < n1; i++)
        L[i] = arr[i];

    foreach (int x in L)
        Console.WriteLine(x);

    for (int i = 0; i < n2; i++)
        R[i] = arr[q+i];

    Console.WriteLine("New part");

    foreach (int x in R)
        Console.WriteLine(x);

    int k=0, d=0;

    for (int i = p; i < r; i++)
    {
        if (L[k] <= R[k])
        {
            arr[i] = L[k];
            k++;
        }
        else
        {
            arr[i] = R[d];
            d++;
        }
    }
}

上面的代码显示exception(index out of bound when I call from main() method using Merge(arr,0,0,12)。其中 arr 是一个长度为 12 的 int 数组。

【问题讨论】:

  • 请添加堆栈跟踪,以及用于从 Main() 调用方法的代码。
  • 说真的,一个没有包含几乎足够的信息来解决它甚至没有问号的问题怎么能获得多个赞成?
  • @Heuster 我想知道完全相同的事情。今晚我看到很多人对非常糟糕的问题表示赞成
  • 请正确命名变量。 p,q,r 没有意义

标签: c# algorithm sorting


【解决方案1】:

您在这部分得到一个索引越界异常:

for (int i = 0; i < n2; i++)
R[i] = arr[q+i];

您的 R 数组的大小为 0,而 n2 使用给定的参数定义为 12。

【讨论】:

    【解决方案2】:

    你的数组 L 被声明为大小 q-p,它们都是 0

    【讨论】:

    • 谢谢。我使用了 Merge(arr,0,6,12) 但同样的问题仍然存在。 :(
    【解决方案3】:

    你的 L 和 R 数组都定义得太小了

    改为这样初始化它们:

    int[] L = new int[arr.Length];
    int[] R = new int[arr.Length];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-10
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      相关资源
      最近更新 更多