梦想是代码一写就对 2023-03-26 15:35 采纳率: 65%
浏览 25
已结题

c++实现合并排序的一个小问题


main()
{
    cout<<"请输入一组数:"<<endl;
    int a[4];
    for(int i=0;i<4;i++)
    cin>>a[i];
    MergeSort(a,0,3);
    for(int i=0;i<4;i++)
    cout<<a[i]<<" ";
}
void MergeSort(int a[],int left,int right)
{
    static int b[4]; 
    if(left<right)//至少有两个个元素 
    {
        int i=(left+right)/2;//取中点 
        MergeSort(a,left,i);
        MergeSort(a,i+1,right);
        Merge(a,b,left,i,right);//合并到数组b 
        Copy(a,b,left,right);//复制回数组a 
    }
}
void Merge(int c[],int d[],int l,int m,int r)//合并c[l:m]和c[m+1:r]到d[l:r] 
{
    int i=l,j=m+1,k=l;
    while((i<=m)&&(j<=r))
    {
        if(c[i]<=c[j])
        {
            d[k++]=c[i++];
        }
        else
        {
            d[k++]=c[j++];
        }
        if(i>m)
        {
            for(int p=j;p<=r;p++)
            d[k++]=c[p];
        }
        else
        {
            for(int q=i;q<=r;q++)
            d[k++]=c[q];
        }
    }
}
void Copy(int a[],int b[],int left,int right)
{
    int i;
    static int j=0;
    for(i=left;i<=right;i++,j++)
    {
        a[j]=b[i];
    }
}

以上是我写的代码,copy函数不知道咋写,该咋写嘞

  • 写回答

3条回答 默认 最新

  • QWQ.qwq 2023-03-26 16:47
    关注

    该回答引用ChatGPT
    您好,您的Copy函数应该是将合并后的数组b复制回原数组a中。下面是一个简单的实现方式,可以参考一下:

    void Copy(int a[], int b[], int left, int right) {
        for(int i = left; i <= right; i++) {
            a[i] = b[i];  // 将b数组的值复制回a数组中对应的位置
        }
    }
    

    这个函数的作用是将数组b中从位置left到right的值复制回数组a中对应的位置。在归并排序算法中,首先需要将数组复制到一个临时数组中进行合并排序。然后,经过排序后的结果需要在最后复制回原始数组中。此时,需要将数组b中的值复制回到数组a中相应的位置。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月2日
  • 创建了问题 3月26日