1 #include <iostream>
2 #include <vector>
3 using namespace std;
4
5 void Merge(vector<int>& nums, const int first, const int mid, const int last, vector<int>&temp)
6 {
7 int begin1 = first, end1 = mid;
8 int begin2 = mid + 1, end2 = last;
9 int cnt = 0;
10
11 while(begin1 <= end1 && begin2 <= end2)
12 {
13 if(nums[begin1] <= nums[begin2])
14 temp[cnt++] = nums[begin1++];
15 else
16 temp[cnt++] = nums[begin2++];
17 }
18
19 while(begin1 <= end1)
20 temp[cnt++] = nums[begin1++];
21
22 while(begin2 <= end2)
23 temp[cnt++] = nums[begin2++];
24
25 for(int i = 0; i < cnt; i++)
26 nums[first + i] = temp[i];
27 }
28
29 void MergeSort(vector<int>& nums, const int first, const int last, vector<int>& temp)
30 {
31 if(first < last)
32 {
33 int mid = (last + first) / 2;
34
35 MergeSort(nums, first, mid, temp);
36 MergeSort(nums, mid + 1, last, temp);
37 Merge(nums, first, mid, last, temp);
38 }
39 }
40
41 int main()
42 {
43 int a[] = {23, 34, 45, 78, 90, 12, 49, 92, 32, 19};
44
45 vector<int> nums(a, a + 10);
46 vector<int> temp(10, 0);
47
48 MergeSort(nums, 0, 9, temp);
49
50 for(int i = 0; i < nums.size(); i++)
51 cout<<nums[i]<<" ";
52 cout<<endl;
53 }