归并排序


 1 #include<stdio.h>
 2 void MERGE(int *A,int p,int q,int r){
 3     int i,j,k;
 4     int *B=malloc((r-p+1)*sizeof(int));
 5     i=p;j=q+1;k=0;
 6     while(i<=q&&j<=r){
 7         if(A[i]<A[j]){
 8             B[k]=A[i];
 9             i++;
10         }
11         else{
12             B[k]=A[j];
13             j++;
14         }
15         k++;
16     }
17     while(i<=q){B[k]=A[i];i++;k++;}
18     while(j<=r){B[k]=A[j];j++;k++;}
19     for(i=p,k=0;i<=r;i++,k++){
20         A[i]=B[k];
21     }
23 }
24 void MERGE_SORTUP(A,p,r){
25     int q;
26     if(p<r){
27         q=(p+r)/2;
28         MERGE_SORTUP(A,p,q);
29         MERGE_SORTUP(A,q+1,r);
30         MERGE(A,p,q,r);
31     }
32 }
33 
34 int main(){
35     int A[]={19,28,73,65,53,14,34,27,1,0};
36     int length=sizeof(A)/sizeof(int);
37     int i;
38     MERGE_SORTUP(A,0,0+length-1);
39     for(i=0;i<length;i++)
40     printf("%d	",A[i]);
41 }

结果:

原文地址:https://www.cnblogs.com/zzsf/p/3819137.html