为什么在为数组输入并输入合并排序函数后出现运行时错误

Why am i getting a runtime error after giving input for array and entering mergesort function?

本文关键字:输入 函数 运行时错误 排序 合并 数组 为什么      更新时间:2023-10-16
#include<iostream>
using namespace std;
void merge(int *lArray, int nL, int *rArray, int nR, int *Array){
 int i,j,k;
 i=0; j=0; k=0;
    //i,j,k are pointers for lArray, rArray & Array
    // nL & nR are numbr of elements in lArray & rArray respectively
 while(i<nL && j<nR)
 {
    if(lArray[i] <= rArray[j])
        Array[k++] = lArray[i++];
    else
        Array[k++] = rArray[j++];
 }
 while(i<nL)
    Array[k++] = lArray[i++];
 while(i<nR)
    Array[k++] = rArray[j++];
 return;
}
void mergesort(int *Array, int n)
{
if (n<2)
    return;
int mid = n/2;
int lArray[mid];
int rArray[n-mid];
    for (int i=0;i<mid;i++)
        lArray[i] = Array[i];
    for (int i=mid;i<n;i++)
        rArray[i-mid] = Array[i];
mergesort(lArray, mid);
mergesort(rArray,n-mid);
merge(lArray,mid,rArray,n-mid,Array);
delete(lArray);
delete(rArray);
}
int main()
{
int Array[10];
int n = 10;
cout<< "Enter Values :" << " ";
for(int i=0; i<10; i++)
    cin>>Array[i];
mergesort(Array,n);
for(int i=0; i<n; i++)
    cout<<Array[i]<< " ";
return 0;
}

这是一个简单的合并排序程序,但我找不到我出错的地方。运行代码后,我能够输入数组的输入,但在进入合并排序功能后,控制台刚刚崩溃。我在 64 位 Windows 8.1 上使用 CodeBlocks。

我已经对您的合并排序函数进行了一些更改。现在,您的程序在控制台上显示输出,但输出未排序。我认为存在数组索引问题可能是分段错误。输出中也存在逻辑错误。

    #include<iostream>
    using namespace std;
    void merge(int *lArray, int nL, int *rArray, int nR, int *Array)
    {
     int i,j,k;
     i=0; j=0; k=0;
        //i,j,k are pointers for lArray, rArray & Array
        // nL & nR are numbr of elements in lArray & rArray respectively
     while(i<nL && j<nR)
     {
        if(lArray[i] <= rArray[j])
            Array[k++] = lArray[i++];
        else
            Array[k++] = rArray[j++];
     }
     while(i<nL)
        Array[k++] = lArray[i++];
     while(i<nR)
        Array[k++] = rArray[j++];
     return;
    }
    void mergesort(int *Array, int n)
    {
    if(n>2)
    {     
    int mid = (n+1)/2;
    int lArray[mid];
    int rArray[n-mid];
        for (int i=0;i<mid;i++)
            lArray[i] = Array[i];
        for (int i=mid;i<n;i++)
            rArray[i-mid] = Array[i];
    mergesort(lArray, mid);
    mergesort(rArray,n-mid);
    merge(lArray,mid,rArray,n-mid,Array);
    delete(lArray);
    delete(rArray);
    }
    }
    int main()
    {
    int Array[10];
    int n = 10;
    cout<< "Enter Values :" << " ";
    for(int i=0; i<10; i++)
        cin>>Array[i];
    mergesort(Array,n);
    for(int i=0; i<10; i++)
        cout<<Array[i]<< " ";
    return 0;
    }