打算用递归法实现归并排序,但结果总是不对,找不到问题,求大佬解答
#include
using namespace std;
int a[100];
void merge(int m[],int l,int r,int rightend);
void sort(int m[],int l,int r);
void msort();
int n;
int main()
{
cin>>n;
for(int i=0;i
{
cin>>a[i];
}
msort();
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
}
void sort(int m[],int l, int r)
{
int center;
if(l<r)
{
center=(l+r)/2;
sort(m,l,center);
sort(m,center+1,r);
merge(m,l,center+1,r);
}
}
void merge(int m[],int l,int r,int rightend)
{
int t=0;
int leftend=r-1;
while(l<=leftend&&r<=rightend)
{
if(a[l]<=a[r])
{
m[t++]=a[l++];
}
else
{
m[t++]=a[r++];
}
}
while(l<=leftend) m[t++]=a[l++];
while(r<=rightend) m[t++]=a[r++];
for(int i=0;i<t;i++)
{
a[l+i]=m[i];
}
}
void msort()
{
int temp[100];
sort(temp,0,n-1);
}
用c++实现归并排序的问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
6条回答
- 困得睁不开眼 2018-08-08 17:54关注
找到两处问题
1.t应该从l开始
2.l中间已经修改了
修改后代码如下#include<stdio.h> #include <iostream> using namespace std; int a[100]; void merge(int m[],int l,int r,int rightend); void sort(int m[],int l,int r); void msort(); int n; int main() { cin>>n; for(int i=0;i <n;++i) { cin>>a[i]; } msort(); for(int i=0;i<n;i++) { cout<<a[i]<<" "; } } void sort(int m[],int l, int r) { int center; if(l<r) { center=(l+r)/2; sort(m,l,center); sort(m,center+1,r); merge(m,l,center+1,r); } } void merge(int m[],int l,int r,int rightend) { //这里的t应该从该l开始而不是从0 开始 int t=l; //这里要将l保存下来 int start = l; int leftend=r-1; while(l<=leftend && r<=rightend) { if(a[l]<=a[r]) { m[t++]=a[l++]; } else { m[t++]=a[r++]; } } while(l<=leftend) m[t++]=a[l++]; while(r<=rightend) m[t++]=a[r++]; //因为上面的l++,已经将l加到了leftend //这里应该从开始start 到 最后的 t 都应该修改 for(int i=start;i<t;i++) { a[i]=m[i]; } } void msort() { int temp[100]; sort(temp,0,n-1); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
- ¥15 如何在scanpy上做差异基因和通路富集?
- ¥20 关于#硬件工程#的问题,请各位专家解答!
- ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
- ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
- ¥30 截图中的mathematics程序转换成matlab
- ¥15 动力学代码报错,维度不匹配
- ¥15 Power query添加列问题
- ¥50 Kubernetes&Fission&Eleasticsearch
- ¥15 報錯:Person is not mapped,如何解決?