C++11 I';我在这个合并排序算法代码中得到一个运行时错误

C++11 I';我在这个合并排序算法代码中得到一个运行时错误,c++11,recursion,c++14,c++17,mergesort,C++11,Recursion,C++14,C++17,Mergesort,这段代码中有一个运行时错误。此代码用于合并排序算法。我怎样才能找到错误 这段代码使用递归和函数。递归调用mergesort函数来分割数组,直到数组的大小减小到1为止。然后使用merge函数合并多个数组 #include <iostream> using namespace std; void merge(int l[],int size1,int r[],int size2,int input[],int size){ int i=0,j=0,k=0

这段代码中有一个运行时错误。此代码用于合并排序算法。我怎样才能找到错误

这段代码使用递归和函数。递归调用mergesort函数来分割数组,直到数组的大小减小到1为止。然后使用merge函数合并多个数组

 #include <iostream>
    using namespace std;
    void merge(int l[],int size1,int r[],int size2,int input[],int size){
        int i=0,j=0,k=0;
        while(i<size1 && j<size2){
            if(l[i]<=r[j]){
                input[k]=l[i];
                k++;
                i++;
            }
            else{
                input[k]=r[j];
                j++;
            }
            k++;
        }
        while(i<size1){
            input[k]=l[i];
            i++;
            k++;
        }
        while (j<size2){
            input[k]=r[j];
            j++;
            k++;
        }
    }
    void mergesort(int input[],int size){
        if(size<2){
            return;
        }
        int mid= size/2;
        int l[500];
        int r[500];
        for(int i=0;i<mid-1;i++){
            l[i]=input[i];
        }
        for(int j=mid;j<size-1;j++){
            r[j-mid]=input[j];
        }
        mergesort(l,mid);
        mergesort(r,size-mid);
        merge(l,mid,r,size-mid,input,size);
    
    
    }
    
    int main() {
        int n;
        cin>>n;
        int arr[1000];
        for(int i=0;i<n;i++){
            cin>>arr[i];
        }
        mergesort(arr,n);
        for(int j=0;j<n;j++){
            cout<<arr[j]<<" ";
        }
    
    
        return 0;
    }
#包括
使用名称空间std;
无效合并(整数l[],整数大小1,整数r[],整数大小2,整数输入[],整数大小){
int i=0,j=0,k=0;

而(i我在代码中看到以下错误


< > >代码> >(int i=0;I.输入是什么)?考虑在调试器中运行代码,这样您就可以看到正在发生的事情。我猜是<代码>(int i=0);i@RSahu与
相同(int j=mid;j@RetiredNinja是的。
while(i<size1 && j<size2){
   if(l[i]<=r[j]){
      input[k]=l[i];
      k++;
      i++;
   }
   else{
      input[k]=r[j];
      j++;
   }
   k++;
}
while(i<size1 && j<size2){
   if(l[i]<=r[j]){
      input[k]=l[i];
      //  k++; This is an error.
      i++;
   }
   else{
      input[k]=r[j];
      j++;
   }
   k++;
}