今天写个简简单单的归并排序。顺带个合并两个有序数组。
先来合并两个有序数组
#include<iostream>
#include<vector>
vector<int> mergeTwoArray(vector<int> arr1, vector<int> arr2)
{
if(arr1.size()==0 && arr2.size()==0) //判断入参是否为空
{
return;
}
if(arr1.size()==0) //arr1为空的话,直接返回arr2
return arr2;
if(arr2.size()==0)
return arr1;
vector<int> arr; //定义一个存放结果的容器
int i=0,j=0;
while(i<arr1.size() && j<<arr2.size()) //遍历两个vector的共同长度
{
if(arr1[i] <= arr2[j])
{
arr.push_back(arr1[i]);
i++;
}
else
{
arr.push_back(arr2[j]);
j++;
}
}
if(i==arr1.size()) //a==arr1.size()说明arr1已经走到了末尾。直接追加arr2容器到最终的结果容器中即可
{
while(j < arr2.size())
{
arr.push_back(arr2[j]);
j++;
}
}
else
{
while(i < arr1.size())
{
arr.push_back(arr1[i]);
i++;
}
}
return arr;
}
前面的博客中有其他排序,接下来。对某个数组进行归并排序,直接上代码说
#include<iostream>
#include<vector>
void mergeSort(vector<int> arr)
{
//第一步肯定还是做入参判断啦
if(arr.size() == 0)
{
return;
}
if(arr.size() == 1)
{
return arr;
}
const length = arr.size();
int mid = length / 2;
vector<int> arr1(arr.begin(), arr.begin()+mid); //左半边构建一个vector
vector<int> arr2(arr.begin()+mid, arr.end()); //右半边构建一个vector
//注意:先执行括号里面的mergeSort函数,当然,这里是递归调用。
//直至拿到返回值(都只含有一个元素)vector时再调用,最上面函数块的mergeTwoArray方法
return mergeTwoArray(mergeSort(arr1), mergeSort(arr2));
}