归并排序基本思想
思想:将两个有序的数组合并成一个有序的数组
第一步:将数组进行分解,当分解成单个元素为一组的时候才是组内有序的
第二步:将两两有序的数组进行合并,将两个有序数组合并成一个有序数组。重复第二步,直至排序完成。
合并的步骤:先申请两数组合并后那么大小的空间,然后将两个排好序的数组逐一进行比较,往申请空间里面放。
归并排序代码
void merge(vector<int> &vec,int l,int mid ,int r)
{
vector<int> nums(r-l+1,0);
int i=l,j=mid+1,index =0;
while(i<=mid&&j<=r)
{
if(vec[i]<=vec[j])
{
nums[index++] = vec[i++];
}else{
nums[index++] = vec[j++];
}
}
while(i<=mid)
{
nums[index++] = vec[i++];
}
while(j<=r)
{
nums[index++] = vec[j++];
}
index = 0;
for(int i =l;i<=r;i++)
{
vec[i] = nums[index++];
}
}
void mergeSort(vector<int> &vec,int l,int r)
{
if(l>=r) return;
int mid = (l+r)/2;
mergeSort(vec,l,mid);
mergeSort(vec,mid+1,r);
merge(vec,l,mid,r);
}