-
Notifications
You must be signed in to change notification settings - Fork 0
/
mergeSort.cpp
88 lines (88 loc) · 1.88 KB
/
mergeSort.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cctype>
#include<iomanip>
#include<map>
#include<vector>
#include<list>
#include<deque>
#include<stack>
#include<queue>
#include<set>
#include<cctype>
#include<string>
#include<stdexcept>
#include<fstream>
#include<sstream>
#include<sstream>
#define mem(a,b) memset(a,b,sizeof(a))
#define debug() puts("what the fuck!")
#define dedebug() puts("what the fuck!!!")
#define ll long long
#define ull unsigned long long
#define speed {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); };
using namespace std;
const double PI = acos(-1.0);
const int maxn = 1e6 + 10;
const int N = 1e3 + 10;
const ll INF = 1e18;
const ll mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const double eps_0 = 1e-9;
const double gold = (1 + sqrt(5)) / 2;
template<typename T>
inline void rd(T& x) {
int f = 1;x = 0;char c = getchar();
while (c<'0' || c>'9') { f = -1; c = getchar(); }
while (c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar(); }
x *= f;
}
template<typename T>
inline T gcd(T a, T b) {
return b ? gcd(b, a % b) : a;
}
int ans[maxn];
int a[maxn];
int n;
void merge(int* a, int l, int r, int mid) {
int i = l;
int j = mid + 1;
int index = l;
while (i <= mid && j <= r) {
if (a[i] < a[j])ans[index++] = a[i++];
else ans[index++] = a[j++];
}
while (i <= mid)ans[index++] = a[i++];
while (j <= r)ans[index++] = a[j++];
for (int k = l; k <= r; ++k) {
a[k] = ans[k];
}
}
void mergeSort(int* a, int l, int r) {
if (l >= r)return;
int mid = (l + r) >> 1;
mergeSort(a, l, mid);
mergeSort(a, mid + 1, r);
merge(a, l, r, mid);
}
void print(int* a) {
for (int i = 1; i <= n; ++i) {
printf("%d%c", a[i], " \n"[i == n]);
}
}
signed main() {
while (cin>>n) {
for (int i = 1; i <= n; ++i) {
cin >> a[i];
}
print(a);
mergeSort(a, 1, n);
//print(a);
printf("mergeSort:");
print(ans);
}
return 0;
}