合并排序代码不工作并显示异常

本文关键字:显示 异常 工作 排序 代码 合并 | 更新日期: 2023-09-27 17:50:31

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数组

合并排序代码不工作并显示异常

你会得到一个Index out of bounds异常:

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

你的r数组的大小是0,而n2在给定参数下定义为12。

数组L的大小为q-p,均为0

你的L和R数组都被定义为太小

像这样初始化它们:

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