将需要排序的数据一分为二,直到两边都只剩一个数据,因为一个数据肯定是有序的,然后合并两个有序的数列
vector<int> merge(vector<int> &nums1, vector<int> &nums2)
{
int count1 = 0, count2 = 0;
vector<int> res;
while (count1 < nums1.size() && count2 < nums2.size())
{
if(nums1[count1] < nums2[count2])
res.push_back(nums1[count1++]);
else if(nums1[count1] > nums2[count2])
res.push_back(nums2[count2++]);
}
while (count1 < nums1.size())
{
res.push_back(nums1[count1++]);
}
while (count2 < nums2.size())
{
res.push_back(nums2[count2++]);
}
return res;
}
void mergeSort(vector<int> &nums)
{
if(nums.size() == 1)
return;
vector<int> nums1, nums2;
int mid = nums.size()/2;
for(int i = 0; i < mid; i++)
nums1.push_back(nums[i]);
for(int i = mid; i < nums.size(); i++)
nums2.push_back(nums[i]);
mergeSort(nums1);
mergeSort(nums2);
nums = merge(nums1, nums2);
}