归并排序、合并两个有序数组

今天写个简简单单的归并排序。顺带个合并两个有序数组。

先来合并两个有序数组

#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));		
}


发布了21 篇原创文章 · 获赞 3 · 访问量 603

猜你喜欢

转载自blog.csdn.net/W96866/article/details/105691912