合并排序代码不工作
本文关键字:工作 代码 排序 合并 | 更新日期: 2023-09-27 17:50:39
我使用c#来实现mergessort()的代码;下面是我在main()
中编写的代码static void Main(string[] args)
{
int[] arr = { 5,9,2,-10,53,-64,10,22,15,-60,2,3};
Merge(arr,0,6,12);
}
这里是Merge()函数
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 < r-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++;
}
}
}
代码显示异常为索引越界引用包含int n1 = q-p的行号;和合并(加勒比海盗、0、6、12);有谁能帮帮我吗
[] = R - n2的长度= 12 (12 - 6)= 6 .
在最后一个for循环中迭代while i <R,即I>
for (int i = p; i < r; i++)
{
if (L[k] <= R[k])
{
arr[i] = L[k];
k++;
}
else
{
arr[i] = R[d];
d++;
}
}
从arr[i] = R[d]触发异常。
编辑:你确定你对R[]长度的定义吗?
int n2 = r - q;
...
int[] R = new int[r-n2]; // this is the same as int[] R = new int[q].