归并排序模版

******归并排序复杂度n(logn)他的复杂度不会退化哦*.*

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cmath>
 5 using namespace std;
 6 void Merge(int A[],int low,int middle,int high)
 7 {
 8     int i,j,k;
 9     int *B = new int[high - low + 1];
10     i = low;
11     j = middle + 1;
12     k = low;
13     while(i <= middle && j <= high) //两个子序列非空
14     {
15         if(A[i] <= A[j]) 
16             B[k++] = A[i++];
17         else
18             B[k++] = A[j++];
19     }
20     while(i <= middle)
21     {
22         B[k++] = A[i++];
23     }
24     while(j <= high)
25     {
26         B[k++] = A[j++];
27     }
28     for(i = low;i <= high;i++)
29     {
30         A[i] = B[i];
31     }
32 }
33 void MergeSort(int A[],int low,int high)
34 {
35     int middle;
36     if(low < high)
37     {
38         middle = (low + high) / 2; //取中点 
39         MergeSort(A,low,middle);
40         MergeSort(A,middle + 1,high);
41         Merge(A,low,middle,high); //合并 
42     }
43 }
44 int main()
45 {
46     int i,j,m,n,c[1005];
47     scanf("%d",&n);
48     for(i = 1;i <= n;i++)
49     {
50         scanf("%d",&c[i]);
51      } 
52      MergeSort(c,1,n);
53      for(i = 1;i <= n;i++)
54      {
55          printf("%d",c[i]);
56      }
57      return 0;
58 }

 

原文地址:https://www.cnblogs.com/rax-/p/9831254.html