【排序算法模板】归并排序

 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 }

 

posted @ 2015-07-07 19:46  tjuloading  阅读(173)  评论(0)    收藏  举报