#include<stdio.h>
//归并排序
void merge(int arr[],int L,int M,int R){
int L_length=M-L;
int R_length=R-M+1;
int left[L_length];
int right[R_length];
int i,j,k;
for(i=L;i<M;i++){
left[i-L]=arr[i];
}
for(i=M;i<=R;i++){
right[i-M]=arr[i];
}
i=0;j=0;k=L;
while(i<L_length&&j<R_length){
if(left[i]<right[j]){
arr[k]=left[i];
k++;
i++;
}
else{
arr[k]=right[j];
k++;
j++;
}
}
while(i<L_length){
arr[k]=left[i];
i++;
k++;
}
while(j<R_length){
arr[k]=right[j];
k++;
j++;
}
}
void mergesort(int arr[],int L,int R){
if(L==R) {
return ;
}
else{
int M=(L+R)/2;
mergesort(arr,L,M);
mergesort(arr,M+1,R);
merge(arr,L,M+1,R);
}
}
int main(){
int arr[]={6,8,10,9,4,5,2,7};
int L=0;
int R=7;
mergesort(arr,L,R);
for(int i=0;i<=R;i++){
printf("%3d",arr[i]);
}
return 0;
}
12-22