这个算法我是根据教学PPT上的伪代码翻译的,检查了一下午也没找到问题在哪,求指点。(附上伪代码
)
#include<bits/stdc++.h>
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<x && j<y){
if(B[i]<=C[j]){
A[k]=B[i];
i++;
}
else {
A[k]=C[j];
j++;
}
k++;
}
if(i>=x){
for(int m=j;m<y;m++){
A[k]=C[m];
k++;
}
}
else{
for(int n=i;n<x;n++){
A[k]=B[n];
k++;
}
}
}
void MergeSort(int A[],int p,int r){
if(p<r){
int 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++){
cin>>S[i];
}
MergeSort(S,0,s-1);
for(int i=0;i<s;i++){
cout<<S[i]<<" ";
}
return 0;
}