【c语言】【每周一练】排序算法之归并排序

#include <stdio.h>
void  merge(int *const a,int p,int q, int r);
void merge_sort(int a[],int p,int r);

int main(void){
int j;
int arraynumber[]={3,5,1,2,0,-1,-3,7,9,8};
int len=sizeof(arraynumber)/sizeof(int);
merge_sort(arraynumber,0,len-1);
for(j=0;j<len;j++)
printf("%d\n",arraynumber[j]);
return 0;
}
void  merge(int *const a,int p,int q, int r){
    int i,j,k,n1,n2,*left,*right;
    n1=q-p+1;
    n2=r-q;
    left=(int *)malloc((n1+1)*sizeof(int));
    right=(int *)malloc((n2+1)*sizeof(int));
    for(j=0;j<n1;j++)
    left[j]=a[p+j];
    left[j]=10000;
    for(j=0;j<n2;j++)
    right[j]=a[q+1+j];
    right[j]=10000;
    i=0;j=0;
    for(k=p;k<=r;k++){
    if(left[i]<=right[j]){
    a[k]=left[i];
    i++;
    }
    else{
    a[k]=right[j];
    j++;

    }

    }
    free(left);
    free(right);
    left=NULL;
    right=NULL;


}
void merge_sort(int a[],int p,int r){
    int q=0;
if(p<r){
q=(p+r)/2;
merge_sort(a,p,q);
merge_sort(a,q+1,r);
merge(a,p,q,r);


}

}

每周一练,day day  up!

原文地址:https://www.cnblogs.com/huals/p/2560573.html