合并排序| C ++-分段错误

问题描述

我认为我会通过编码一些基本的DS和Algos来修改我的概念。经过很大的步伐,我现在有点卡住了,无法识别我的错误。 我在以下代码结果中遇到了细分错误。任何帮助都会很棒!

#include<bits/stdc++.h>
using namespace std;

void merge(int *arr,int s,int m,int e){
    int n1 = m-s,n2 = e-m+1;
    int L[n1],R[n2];
    for(int i=0; i<n1; i++)
        L[i] = arr[s+i];
    for(int i=0; i<n2; i++)
        R[i] = arr[m+i];
    
    int p1 = 0,p2 = 0,k = s;
    while(p1<n1 && p2<n1){
        if(L[p1] <= R[p2])
            arr[k++] = L[p1++];
        else
            arr[k++] = R[p2++];
    }

    while(p1<n1)
        arr[k++] = L[p1++];
    while(p2<n2)
        arr[k++] = R[p2++];
    return;
}


void mergeSort(int *arr,int e){
    if(s>=e) return;
    int m = (s+e)/2;
    mergeSort(arr,s,m-1);
    mergeSort(arr,m,e);
    merge(arr,e);
    return;
}
int main(){
    int n;
    cin>>n;
    int arr[n];
    for(int i=0; i<n; i++)
        cin>>arr[i];
    mergeSort(arr,n-1);

    for(int i=0; i<n; i++)
        cout<<arr[i]<<" ";
    cout<<endl;

    return 0;
}

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)