c++ - 合并排序 | 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 s, int e){
if(s>=e) return;
int m = (s+e)/2;
mergeSort(arr, s, m-1);
mergeSort(arr, m, e);
merge(arr, s, m, e);
return;
}
int main(){
int n;
cin>>n;
int arr[n];
for(int i=0; i<n; i++)
cin>>arr[i];
mergeSort(arr, 0, n-1);
for(int i=0; i<n; i++)
cout<<arr[i]<<" ";
cout<<endl;
return 0;
}
提前致谢!
解决方案
分段错误是因为您有一个无限递归循环。索引有一些问题,还有一个错字,你的意思是 n2 但写了 n1。
#include <iostream>
using namespace std;
void merge(int *arr, int s, int m, int e){
int n1 = m-s+1, n2 = e-m;
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+1];
int p1 = 0, p2 = 0, k = s;
while(p1<n1 && p2<n2){
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 s, int e){
if(s>=e) return;
int m = (s+e)/2;
mergeSort(arr, s, m);
mergeSort(arr, m+1, e);
merge(arr, s, m, e);
return;
}
int main() {
int n;
cout << "Select value for N:";
cin>>n;
int arr[n];
cout << "Reading input:";
for(int i=0; i<n; i++)
cin >> arr[i];
cout << "Your input is:" << endl;
for(int i=0; i<n; i++)
cout << arr[i]<<" ";
cout << endl;
cout << "Running merge sort" << endl;
mergeSort(arr, 0, n-1);
cout << "Final array:" << endl;
for(int i=0; i<n; i++)
cout<<arr[i]<<" ";
cout << endl;
return 0;
}
推荐阅读
- python - 为什么我的 GCP 自定义数据流模板没有生成但没有输出错误?
- crash - 关于 OnNoMemory 的电子崩溃
- javascript - 在 vuex getter 中链接多个过滤器
- jenkins-pipeline - Jenkins 声明式管道在后期阶段获取环境变量
- python - 使用while循环python创建日期列表
- r - 使用第二个表中的多个条件对数据表进行子集化
- python-3.x - 为什么延迟参数会影响预测曲线?
- javascript - 如何使用 Javascript 创建 Windows 通知
- automation - 扩展 SAP 树
- azure - 如何在 Log Analytic Workspace 上以 Kusto 查询语言查询不兼容的 Azure 策略