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

归并排序 Acwing 787

时间:2023-10-31 18:55:17浏览次数:442  
标签:sort 归并 787 int mid 数组 排序 Acwing

归并排序最重要的一部便是归并,我们的模板顺序为:

定义一个中间值,将我们的区间范围一分为二,我们将

这两部分看成两个数组,我们分别将这两个数组进行归并

排序,并且定义一个新的数组,将这两个数组排序好后导入

到这个新数组中,并最后将这个定义的数组输出为原数组,即可

实现归并排序。

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 const int N = 1e5 + 10;
 6 
 7 int n;
 8 int a[N],tmp[N];
 9 
10 void merge_sort(int a[],int l,int r)
11 {
12     if(l >= r) return ;
13     int mid = l + r >> 1;
14     
15     merge_sort(a,l,mid),merge_sort(a,mid + 1 ,r);
16     
17     int k = 0,i = l,j = mid + 1;
18     while(i <= mid && j <= r)
19         if(a[i] <= a[j]) tmp[k ++] = a[i ++]; // 等价于tmp[k] = a[i] ;k ++;i ++;
20         else tmp[k ++] = a[j ++];
21         
22     while(i <= mid) tmp[k ++] = a[i ++];
23     while(j <= r) tmp[k ++] = a[j ++];
24     
25     for (int i = l,j = 0; i <= r; i ++,j ++ ) a[i] = tmp[j];
26 }
27 
28 int main()
29 {
30     scanf("%d", &n);
31     for (int i = 0; i < n; i ++ ) scanf("%d", &a[i]);
32     
33     merge_sort(a,0,n - 1);
34     
35     for (int i = 0; i < n; i ++ ) printf("%d ",a[i]);
36     
37     return 0;
38 }

 

标签:sort,归并,787,int,mid,数组,排序,Acwing
From: https://www.cnblogs.com/rw666/p/17801008.html

相关文章

  • 二分模板 Acwing 789 数的范围
     二分一定有解,若出现无解,一定是题目中无解二分步骤:定义check函数,先找到一个x,使得区间左边满足条件区间右边不满足条件,定义mid=l+r>>1去判断于x的关系,此时需要判断边界关系,例如当a[mid]小于x时,说明二分值在x的左边,此时缩小范围为【mid,r】,即令l=mid,此时返回check函数,......
  • 归并排序统计逆序对的数量
    788.逆序对的数量-AcWing题库 昨天刚好做到这题,发现网上题解都讲的不是很详细,于是决定自己手写一篇。 归并排序能统计逆序对的数量 为什么归并排序能统计逆序对数量???归并排序的特点是,以mid,mid+1为分界,对两边分别进行排序借助递归的性质先将两边都从小到大排好序,之......
  • 复仇归并排序
     归并排序就是,把一群数据一直分,一直分,分到不能再分之后,一个个按顺序把你们装进去 讲讲第一个难点,上面两个mergesort归并,其实这是一个把人给分开,分成两组,接着再分,再分。。。分到没办法分的时候,往下走。。。然后接着就是定义指针ijk,然后就有一个困扰了我很久的问题,为什么可......
  • AcWing 3559. 围圈报数
    考点:约瑟夫环问题,环形链表,队列#include<bits/stdc++.h>usingnamespacestd;constintN=55;intne[N];//链表指针数组intmain(){ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);intt;cin>>t;while(t--){i......
  • Acwing127周赛第三题 构造矩阵 (套路)
    题目链接:构造矩阵题目描述我们希望构造一个n×m的整数矩阵。构造出的矩阵需满足:每一行上的所有元素之积均等于k。每一列上的所有元素之积均等于k。保证k为1或−1。请你计算,一共可以构成出多少种不同的满足条件的矩阵。由于结果可能很大,你只需要输出对109+7......
  • Acwing.第126场周赛
    Acwing.第126场周赛比赛链接之前忘记整理上传了,不能有遗留问题A.蜗牛爬井蜗牛在n米深的井底往上爬,每天清晨到傍晚向上爬5米,夜间又滑下来4米,请问像这样从某天清晨开始,第几天爬到井口?输入格式一个正整数n。输出格式一个整数,表示爬到井口的天数。思路:就是一个比较简答......
  • acwing367证明
    首先,\(max(p,q)\)是下界,因为连一条边最多只能减少一个零入度点和一个零出度点,而最终的图不可能有哪怕一个零出度点或者零入度点(最后的图刚好就是一个点)根据这个下界,我们也很容易可以构造出来一种方法,让零出度点和另一个SCC的零入度点相连即可,就像下面一样(红色边是添加的边)......
  • 归并排序求逆序对
    #include<iostream>#include<algorithm>#include<cstring>usingnamespacestd;constintN=1e5+10;inta[N];intans=0;inttmp[N];voidmergesort(inta[],intl,intr){if(l>=r)return;intmid=l+r>>1;m......
  • Acwing393. 雇佣收银员 题解 差分约束
    题目链接:https://www.acwing.com/problem/content/description/395/解题思路:差分约束。为了方便起见,定义第\(i\)个时间段为\(i-1:00\)到\(i:00\)首先,为了方便开一个额外的点,令\(R_i\)对应为题目中的\(R(i+1)\),即\(R_i\)表示\(i-1:00\)到\(i:00\)这个时间段的最小需求......
  • acwing318 划分大理石
    有价值分别为1..6的大理石各a[1..6]块,现要将它们分成两部分,使得两部分价值之和相等,问是否可以实现。其中大理石的总数不超过20000。输入格式输入包含多组数据!每组数据占一行,包含6个整数,表示a[1]∼a[6]。当输入为000000时表示输入结束,且该行无需考虑。输出......