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