首页 > 编程语言 > 详细

c++ 归并排序

时间:2019-06-23 22:13:11      阅读:232      评论:0      收藏:0      [点我收藏+]

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

技术分享图片

c++ 归并排序

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!