您的位置:首页 > 其它

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

2015-07-07 19:46 417 查看
#include <iostream>
#include <vector>
using namespace std;

void Merge(vector<int>& nums, const int first, const int mid, const int last, vector<int>&temp)
{
int begin1 = first, end1 = mid;
int begin2 = mid + 1, end2 = last;
int cnt = 0;

while(begin1 <= end1 && begin2 <= end2)
{
if(nums[begin1] <= nums[begin2])
temp[cnt++] = nums[begin1++];
else
temp[cnt++] = nums[begin2++];
}

while(begin1 <= end1)
temp[cnt++] = nums[begin1++];

while(begin2 <= end2)
temp[cnt++] = nums[begin2++];

for(int i = 0; i < cnt; i++)
nums[first + i] = temp[i];
}

void MergeSort(vector<int>& nums, const int first, const int last, vector<int>& temp)
{
if(first < last)
{
int mid = (last + first) / 2;

MergeSort(nums, first, mid, temp);
MergeSort(nums, mid + 1, last, temp);
Merge(nums, first, mid, last, temp);
}
}

int main()
{
int a[] = {23, 34, 45, 78, 90, 12, 49, 92, 32, 19};

vector<int> nums(a, a + 10);
vector<int> temp(10, 0);

MergeSort(nums, 0, 9, temp);

for(int i = 0; i < nums.size(); i++)
cout<<nums[i]<<" ";
cout<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: