关于#算法#的问题:这个算法我是根据教学PPT上的伪代码翻译的,检查了一下午也没找到问题在哪(语言-c++)

这个算法我是根据教学PPT上的伪代码翻译的,检查了一下午也没找到问题在哪,求指点。(附上伪代码

img

img


#include
using namespace std;


void Merge(int A[],int p,int q,int r){
    int x=q-p+1,y=r-q;
    int B[x],C[y];
    int k=0;
    for(int i=p;i<=q;i++){
        B[k++]=A[i];
    }
    k=0;
    for(int i=q+1;i<=r;i++){
        C[k++]=A[i];
    }    
    int i,j=0;
    k=p;
    while(i && jif(B[i]<=C[j]){
            A[k]=B[i];
            i++;        
        }
        else {
            A[k]=C[j];
            j++;
        }
        k++;
        
    }
    if(i>=x){
        for(int m=j;m[k]=C[m];
            k++;
        }
    } 
    else{
        for(int n=i;n[k]=B[n];
            k++;
        }
    }
}

void MergeSort(int A[],int p,int r){
    if(pint q=(p+r)/2;
        MergeSort(A,p,q);
        MergeSort(A,q+1,r);
        Merge(A,p,q,r);
    }
}
int main(){
    int s;
    cin>>s;
    int S[s];
    for(int i=0;i>S[i];
    }
    MergeSort(S,0,s-1);
    for(int i=0;i[i]<<" "; 
    }
    return 0;
} 


#include<iostream>
using namespace std;
//合并排序
int Mergesort(int a[],int left,int right);
void Merge(int a[],int left,int mid,int right);
  
int main()
{
    int n;
    cin>>n;
    int *a=new int[n];
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }

    Mergesort(a,0,n-1);

    for(int i=0;i<n;i++)
    {
        cout<<a[i]<<" ";
    }
    delete [] a;
    return 0;
}

int Mergesort(int *a,int left,int right)
{
    if(left<right)
    {
        int mid=(left+right)/2;
        Mergesort(a,left,mid);
        Mergesort(a,mid+1,right);
        Merge(a,left,mid,right);
    }
    else{return 0;}
}

void Merge(int *a,int left,int mid,int right)
{
    int *b=new int[right-left+1];
    int i=left,j=mid+1;
    int k=0;
    while(i<=mid&&j<=right)
    {
        if(a[i]>a[j])
        {
            b[k]=a[j];
            k++;
            j++;
        }
        else
        {
            b[k]=a[i];
            k++;
            i++;
        }

    }
    while(i<=mid)
    {
        b[k++]=a[i++];
    }
    while(j<=right)
    {
        b[k++]=a[j++];
    }
    int site=0; 
    for(int m=left;m<=right;m++)
    {
        a[m]=b[site++];
    }
    delete [] b;
}

具体看 https://blog.csdn.net/YTLDSS/article/details/123962059

参考GPT和自己的思路:

这段代码实现的是归并排序算法,基本思路是将一个序列分成两个子序列递归分别排序,然后将两个子序列合并成一个有序序列。根据你提供的伪代码和代码实现,这段代码看起来并没有问题。如果你说检查了一下午,仍然无法找到问题的所在,建议你再仔细检查一下数据输入,或者提供更详细的出错信息,方便我们进行排查。同时,你也可以参考其他实现相同算法的代码,比较一下自己的实现是否有误。