【排序算法模板】归并排序
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 }