归并排序运行结果错误,如何解决?(语言-c++)

归并排序运行结果错误
代码如下
请帮忙看一下

#include 
using namespace std;

void Merge_sort(int a[],int q,int p,int temp[]);
void Merge(int a[],int q,int s,int p,int temp[]);

int main()
{
    int a[10]={4,32,8,12,53,9,3,7,2,17};
    int b[10];
    int x=sizeof(a)/sizeof(int);
    Merge_sort(a,0,x-1,b);
    for(int i=0;i[i]<<" , ";
    return 0;
}
void Merge_sort(int a[],int q,int p,int temp[])
{
    if(qint s=q+(p-q)/2;
        Merge_sort(a,q,s,temp);
        Merge_sort(a,s+1,p,temp);
        Merge(a,q,s,p,temp);
    }
}
void Merge(int a[],int q,int s,int p,int temp[])
{
    int pb=0;
    int p1=q,p2=s+1;
    while(p1<=s&&p2<=p)
    {
        if(a[p1][p2])
            temp[pb++]=a[p1++];
        else
            temp[pb++]=a[p2++];
    }
    while(p1<=s)
        temp[pb++]=a[p1++];
    while(p2[pb++]=a[p2++];
    for(int i=0;i1;i++)
        a[s+i]=temp[i];
}



目测 while 循环条件改为 p2<=p

在 Merge 函数的最后一个 while 循环中,应该将条件改成 p2<=p,因为右半部分的最后一个元素下标是 p-1,而不是 p。我给你修改一下:

void Merge(int a[], int q, int s, int p, int temp[]) {
    int pb = 0;
    int p1 = q, p2 = s + 1;
    while (p1 <= s && p2 <= p) {
        if (a[p1] < a[p2])
            temp[pb++] = a[p1++];
        else
            temp[pb++] = a[p2++];
    }
    while (p1 <= s)
        temp[pb++] = a[p1++];
    while (p2 <= p)
        temp[pb++] = a[p2++];

    for (int i = 0; i < p - q + 1; i++)
        a[q + i] = temp[i];
}


此外,建议在编写代码时注意变量名的语义,例如 pb、p1 和 p2 可以使用更有意义的名称,让代码更加易读和易懂,你这种写法后期不好维护