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)依次输出元素

1710746-20190623211134869-1816204134.png

转载于:https://www.cnblogs.com/LJA001162/p/11074385.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值