• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
scorpiorax
博客园    首页    新随笔    联系   管理    订阅  订阅
归并排序模版

******归并排序复杂度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 }

 

 

posted on 2018-10-22 17:18  scorpiorax  阅读(141)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3