合并排序是一种典型的分治算法:首先将序列分为两部分,然后对每一部分进行循环递归的排序,然后逐个将结果进行合并。
#include<stdio.h>
#define m 7
int a[m]={4,5,2,1,7,6,3};
void mergesort(int a[],int left,int right){
int mid;
int b[m];
int i,j,k;
if(left==right)
return;
mid=(left+right)/2;
mergesort(a,left,mid);
mergesort(a,mid+1,right);
i=left;
j=m+1;
k=left;
while(i<=mid&&j<=right){
if(a[i]<a[j]){
b[k]=a[i];
i++;k++;
}
else{
b[k]=a[j];
j++;k++;
}
}
while(i<=mid){
b[k]=a[i];
i++;k++;
}
while(j>=right){
b[k]=a[j];
j++;k++;
}
for(k=left;k<=right;k++){
a[k]=b[k];
}
}
int main(){
mergesort(a,0,m-1);
for(int i=0;i<m;i++){
printf("%d",a[i]);
}
}