MKDLFDKFL 2022-09-30 21:20 采纳率: 50%
浏览 67
已结题

C++用递归方法写归并排序


#include<iostream>
using namespace std;
/*void Merge(int *A,int p,int q,int r)
{
    int n1 = q - p + 1;
    int n2 = r - q;
    int L[n1 + 1];
    int R[n2 + 1];

    for(int i = 1; i <= n1; i++)
    {
        L[i] = A[p + i - 1];
    }

    for(int j = 1; j <= n2 ; j++)
    {
        R[j] = A[q + j];
    }

    int i = 1,j = 1;

    for(int k = p; k <= r; k++)
    {
        if(L[i]<=R[j])
        {
            A[k] = L[i];
            i++;
        }
        else{
            A[k] = R[j];
            j++;
        }
    }

}
*/

void Merge(int* A, int low, int mid, int high)
{
    int i, j, k;
    int* B = new int[sizeof(int)*high];
    for (int i = 1; i < high - low - 2; i++)
    {
        cout << B[i] << " ";
    }
    cout << endl;
    i = low;
    j = mid + 1;
    k = low;
    while (i <= mid && j <= high)
    {
        if (A[i] < A[j])
        {
            B[k++] = A[i++];
        }
        else
        {
            B[k++] = A[j++];
        }
    }
        while (i <= mid)
        {
            B[k++] = A[i++];
        }

        while (j <= high)
        {
            B[k++] = A[j++];
        }

        for (int i = 1; i <= high; i++)
        {
            cout << B[i] << " ";
        }
        cout << endl;
    
}
void Merge_Sort(int* A, int low, int high)
{
    int mid;
    if (low < high)
    {
        mid = ((low + high) / 2);
        Merge_Sort(A, low, mid);
        Merge_Sort(A, mid + 1, high);
        Merge(A, low, mid, high);
    }

}


int main()
{
    int A[11] = { 0,10,9,8,7,6,5,4,3,2,1 };

    Merge_Sort(A, 1, 10);

    for (int i = 1; i <= 10; i++)
    {
        cout << A[i] << " ";
    }

    return 0;
}

这是一个递归的归并排序,我不知道哪里错了.希望能有一个正确的答案

  • 写回答

3条回答 默认 最新

  • 快乐鹦鹉 2022-09-30 21:39
    关注
    获得3.90元问题酬金

    是编译有错,还是结果不对???

    #include<iostream>
    using namespace std;
    
    void Merge(int* A, int low, int mid, int high,int *B)
    {
        int i, j, k;
        i = low;
        j = mid + 1;
        k = 0;
        while (i <= mid && j <= high)
        {
            if (A[i] < A[j])
            {
                B[k++] = A[i++];
            }
            else
            {
                B[k++] = A[j++];
            }
        }
            while (i <= mid)
            {
                B[k++] = A[i++];
            }
     
            while (j <= high)
            {
                B[k++] = A[j++];
            }
            //
            k=0;
             while(low <= high){
                A[low++] = B[k++];
            }
        
    }
    void Merge_Sort(int* A, int low, int high,int *B)
    {
        int mid;
        if (low < high)
        {
            mid = ((low + high) / 2);
            Merge_Sort(A, low, mid,B);
            Merge_Sort(A, mid + 1, high,B);
            Merge(A, low, mid, high,B);
        }
     
    }
     
     
    int main()
    {
        int A[10] = { 4,9,2,7,6,5,10,3,8,1 };
        int B[10];
     
        Merge_Sort(A, 0, 9,B);
     
        for (int i = 0; i <= 9; i++)
        {
            cout << A[i] << " ";
        }
        return 0;
    }
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 10月8日
  • 创建了问题 9月30日

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?