首页 > 其他分享 >Acwing 787.归并排序

Acwing 787.归并排序

时间:2022-10-27 08:33:30浏览次数:44  
标签:sort tmp 归并 787 int mid merge 排序 Acwing

注意理解代码层次。

#include<bits/stdc++.h>

using namespace std;

#define N 10e5+10;    //数组开太小容易栈溢出
int  a[N],tmp[N];

void merge_sort(int q[],int l,int r){
    if(l>r) return;
    int mid=l+r>>1;
    
    #往下划分
    merge_sort(l,mid);
    merge_sort(mid+1,r);
    
    int k=0,i=1,j=mid+1,tmp[r-l+1];
    #排序
    while(i<=mid&&j<=r){
        if(q[i]<=q[j])
            tmp[k++]=a[i++];
        else
            tmp[k++]=a[j++];
    }
    #处理剩余的数
    while(i<=mid) tmp[k++]=a[i++];
    while(j<=r) tmp[k++]=a[j++];
    #填入排序后的数组
    for (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j];	

}

int main(){
    int n;
    cin>>n;
    
    for(int i=0;i<n;i++)
        cin>>a[i];
    merge_sort(a[i],0,n);
    for(int i=0;i<n;i++)
        cou<<a[i];
}

标签:sort,tmp,归并,787,int,mid,merge,排序,Acwing
From: https://www.cnblogs.com/Nikkie-02/p/16830802.html

相关文章

  • AcWing 1022. 宠物小精灵之收服
    宠物小精灵之收服(二维费用背包问题)原题链接:https://www.acwing.com/problem/content/1024/思路先做一个阅读理解每一个小精灵只能收一次->01背包接下来去考虑体积、......
  • Acwing 快速排序
    基于分治的思想,每次划分后,保证基准(x)前的数都比基准小,其后的树都比基准大即可。#include<iostream>usingnamespacestd;constintN=100010;intq[N];voidquic......
  • ACWing 4480 -- 二分&&双指针&&思维
    题目描述倒垃圾思路其实就是思维题,题意很简单,找到一个居民左侧和右侧(如果存在的话)的垃圾桶中最近的那个垃圾桶,然后让那个垃圾桶的计数器加一。从题目中挖掘的性质:左......
  • AcWing 271杨老师的照相排列
    思路\(1=<k<=5\),所以最多会有五个位置,五个位置分配人,即集合为f[a][b][c][d][e]表示五个位置各放了a,b,c,d,e个人的方法的数量,同时h[1]>=h[2]>=h[3]>=h[4]>=h[5],所......
  • ACWing - 4493 -- 思维题&&并查集&&dfs
    题目描述环形连通分量思路对于一个无向图中的简单环(环中边的数量等于点的数量),有一个很强的性质:每个点的度数等于\(2\)。那么我们只需要先找出所有的连通块,然后判......
  • AcWing168 生日蛋糕(剪枝)
    原题链接思路的话,就是暴搜加剪枝,中间有个放缩思路看这篇#include<bits/stdc++.h>#definepbpush_back#definefifirst#definesesecond#defineall(x)(x).begi......
  • AcWing107 超快速排序(树状数组找逆序对)
    原题链接思路求到底要和相邻元素交换几次,其实就是求逆序对的数量,有几对逆序对就要交换几次,因为只能相邻的之间交换(超快速排序?冒泡排序!)利用树状数组求逆序对大概想法......
  • 归并排序
    voidmerge_sort(intq[],intl,intr){if(l>=r)return;intmid=l+r>>1;merge_sort(q,l,mid);merge_sort(q,mid+1,r);intk=0,i=l,j=mid......
  • AcWing 216. Rainbow的信号
    题目链接:​​传送门​​将权值转化成二进制来看,最多30位枚举每一位并且枚举一个右端点通过这个右端点判断有多少个左端点符合条件,累计贡献要注意单独讨论左端点等于右端......
  • AcWing 100. IncDec序列
    题目链接:​​传送门​​将序列转化成差分数列那么题目就变成了对一个数组可进行三种操作对两个元素一个加一一个减一或对一个元素加一或对一个元素减一其实后面两种操作......