#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define MAXD 100 + 10
int n;
void MERGE(int array[],int p,int q,int r){
int R[MAXD],L[MAXD];
int n1 = q - p + 1;
int n2 = r - q;
for(int i = 1 ; i <= n1 ; i++) L[i] = array[p + i - 1];
L[n1 + 1] = 1 << 30;
for(int i = 1 ; i <= n2 ; i++) R[i] = array[q + i];
R[n2 + 1] = 1 << 30;
for(int k = p , l = 1 ,t = 1; k <= r ; k++){
if(L[l] < R[t]) {
array[k] = L[l];
l++;
}
else{
array[k] = R[t];
t++;
}
}
}
void MERGE_SORT(int array[],int p,int r){
printf("*%d %d*\n",p,r);
for(int i = 0 ; i < n ; i++)
printf("%d ",array[i]);
printf("\n");
if(p < r){
int q = (p + r) / 2;
MERGE_SORT(array,p,q);
MERGE_SORT(array,q + 1,r);
MERGE(array,p,q,r);
}
return ;
}
int main(){
int array[10];
scanf("%d",&n);
for(int i = 0 ; i < n ; i++) scanf("%d",&array[i]);
MERGE_SORT(array,0,n - 1);
printf("归并排序结果:\n");
for(int i = 0 ; i < n ; i++)
printf("%d\n",array[i]);
return 0;
}
归并排序
最新推荐文章于 2024-12-15 17:47:59 发布