算法导论三剑客之 分治算法 合并排序

 1 #include "iostream"
 2 #include "windows.h"
 3 #define MAX 0x7fffffff
 4 using namespace std;
 5 
 6 void merge(int s,int q,int e,int A[]){
 7     int i,j,k;
 8     int B[100],C[100];
 9     for(i=s;i<=q;i++)
10         B[i-s+1]=A[i];
11     for(j=q+1;j<=e;j++)
12         C[j-q]=A[j];
13     B[q-s+2]=C[e-q+1]=MAX;
14 
15     i=j=1;
16     k=s;
17     while(k<=e){
18         if(B[i]>=C[j]){
19             A[k]=C[j];
20             j++;
21         }
22         else{
23             A[k]=B[i];
24             i++;
25         }
26         k++;
27     }
28 
29 }
30 
31 
32 void merge_sort(int s,int e,int A[]){
33     if(e>s){
34         int q=(s+e)/2;
35         merge_sort(s,q,A);
36         merge_sort(q+1,e,A);
37         merge(s,q,e,A);
38     }
39 }
40 void main(){
41     int A[]={0,1,12,3,4,3,7,1,122};
42     merge_sort(1,8,A);
43     int i;
44     for(i=1;i<=8;i++){
45         cout<<A[i]<<" ";
46     }
47     cout<<endl;
48     getchar();
49 }
原文地址:https://www.cnblogs.com/593213556wuyubao/p/3790274.html