C語言實現歸並排序


 1 #include<stdio.h>
 2 
 3 #define MAXN 100
 4 //A[p,q] A[q+1,r]是兩個有序數組,想辦法把他們結合成一個有序數組
 5 void merge(int A[],int p,int q,int r){
 6     int n=0;
 7     int i=p;
 8     int j=q+1;
 9     int tmp[MAXN];
10     while(i<=q&&j<=r){
11         if(A[i]<=A[j])
12             tmp[n++]=A[i++];
13         else
14             tmp[n++]=A[j++];
15     }
16     while(i<=q)
17         tmp[n++]=A[i++];
18     while(j<=r)
19         tmp[n++]=A[j++];
20     int k;
21     for(k=p;k<p+n;k++)
22         A[k]=tmp[k-p];
23 }
24 
25 //歸並排序主體
26 void merge_sort(int A[],int p,int r){
27     if(p<r){
28         int q=(p+r)/2;
29         merge_sort(A,p,q);
30         merge_sort(A,q+1,r);
31         merge(A,p,q,r);
32 }
33 }
34 
35 int main(){
36     int A[]={2,56,3,7,86,1,6,43,12};
37     merge_sort(A,0,8);
38     int k;
39     for(k=0;k<=8;k++)
40     printf("%d ",A[k]);
41     printf("\n");
42     return 0;
43 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM