lihaoyuaiqq130 2018-08-08 05:22 采纳率: 66.7%
浏览 2519
已采纳

用c++实现归并排序的问题

打算用递归法实现归并排序,但结果总是不对,找不到问题,求大佬解答
#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);
}

  • 写回答

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);
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误