合并排序代码不起作用并显示exception

public static void Merge(int[] arr,int p,int q,int r ) { int n1 = qp; int n2 = rq; 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数组。

您在此部分中获得了一个Index out of bounds exception:

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

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

数组L的大小为qp,均为0

L和R数组都定义为太小

相反地​​将它们初始化为:

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