归并排序题目整理归并(hdu)


hdu2019数列有序

 1 #include <iostream>
 2 using namespace std;
 3 int A[101];
 4 int main()
 5 {
 6     int m,n;
 7     void Merge(int p,int q,int r);
 8     while(cin >> n >> m){
 9             if(n == 0&&m ==0) break;
10             for(int i = 0;i < n;i++) cin >> A[i];
11             A[n] = m;
12             Merge(0,n-1,n);
13             for(int i = 0;i < n;i++) cout << A[i] << " ";
14             cout << A[n] << endl;
15     }
16     return 0;
17 }
18 void Merge(int p,int q,int r){
19     int n1 = q - p + 1;
20     int n2 = r - q;
21     long long L[n1],R[n2];
22     for(int i = 0;i < n1;i++) L[i] = A[i+p];
23     for(int i = 0;i < n2;i++) R[i] = A[i+q+1];
24     L[n1] = 100000000;R[n2] = 100000000;
25     int i = 0;int j = 0;
26     for(int k = p;k <= r;k++){
27             if(L[i] < R[j]) A[k] = L[i++];
28             else A[k] = R[j++];
29     }
30 }

hdu1040As Easy As A+b

 1 #include<iostream>
 2 using namespace std;
 3 int A[1000];
 4 int main()
 5 {
 6     void Merge(int p,int q,int r);
 7     void Merge_sort(int p,int q);
 8     int num;int m,n;
 9     cin >> num;
10     while(num--){
11             cin >> n;
12             for(int i = 0;i < n;i++) cin >> A[i];
13             Merge_sort(0,n-1);
14             for(int i = 0;i < n - 1;i++) cout << A[i] << " ";
15             cout << A[n-1] << endl;
16     }
17     return 0;
18 }
19 
20 void Merge(int p,int q,int r)
21 {
22     int n1 = q - p + 1;
23     int n2 = r - q;
24     long long L[n1],R[n2];
25     //将原数列分到两个数列
26     for(int i = 0;i < n1;i++) L[i] = A[i+p];
27     for(int i = 0;i < n2;i++) R[i] = A[i+q+1];
28     L[n1] = 100000000;R[n2] = 100000000;//作为哨兵
29     int i = 0;int j = 0;
30     //接下来进行排序
31     for(int k = p;k <= r;k++){
32             if(L[i] < R[j]) A[k] = L[i++];
33             else A[k] = R[j++];
34     }
35 }
36 void Merge_sort(int p,int q)
37 {
38     int l;
39     if(p - q == 1) {
40             if(A[q] < A[p]){l = A[q];A[q] = A[p];A[p] = l;}}
41     else if(q - p) {
42             int center = (p + q) / 2;
43             Merge_sort(p,center);
44             Merge_sort(center + 1,q);
45             Merge(p,center,q);
46     }
47 }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值