c++ 归并排序

c++ 归并排序

输入输出格式

输入格式:

第11行为一个正整数NN,第22行包含NN个空格隔开的正整数a_ia
i
​ ,为你需要进行排序的数,数据保证了A_iA
i
​ 不超过10000000001000000000。

输出格式:

将给定的NN个数从小到大输出,数之间空格隔开,行末换行且无空格。

输入输出样例

输入样例#1:

8
10 4 6 3 8 2 5 7

输出样例#1:

2 3 4 5 6 7 8 10

代码及注释

#include <bits/stdc++.h>
using namespace std;
int a[100];
int r[100];
void Sort(int L,int R)
{
	if (L == R)//如果只有一个元素
		return ;//退出
	else
	{
		int mid = (L + R) / 2;//计算出中间值
		Sort(L,mid);//拆分mid前面的
		Sort(mid + 1,R);//拆分mid后面的
/***************对左右两个有序数组合并****************************/
		int k = L;
		int i = L;
		int j = mid + 1;
		while (i <= mid && j <= R)//进行逐个遍历
		{
			if (a[i] <= a[j])//如果左边比右边大
			{
				r[k] = a[i];//把小的排在前面
				k ++;
				i ++;
			}
			else//如果右边比左边大
			{
				r[k] = a[j];//把小的排在前面
				k ++;
				j ++;
			}
		}
		while (i <= mid)//如果还有剩余,就直接复制到r[]
		{
			r[k] = a[i];
			i ++;
			k ++;
		}
		while (j <= R)//如果还有剩余,就直接复制到r[]
		{
			r[k] = a[j];
			j ++;
			k ++;
		}
		for (int i = 1;i <= R;i ++)//把r[]全部赋值给a[]
		{
			a[i] = r[i];
		}
	}
}
int main()
{
	int n;
	cin >> n;
	for (int i = 1;i <= n;i ++)
	{
		cin >> a[i];
	}
	Sort(1,n);//调用
	for (int i = 1;i <= n;i ++)
	{
		cout << a[i] << " ";
	 } 
	return 0;
 } 

思路

1)输入你要排序的数
2)把这些数字拆分拆分拆分,到不能拆分为止
3)合并这些元素,合并时那个小就把那个放上去
4)依次输出元素

原文地址:https://www.cnblogs.com/LJA001162/p/11074385.html