首页 > 其他分享 >归并排序复习 && 求逆序对

归并排序复习 && 求逆序对

时间:2022-10-25 11:34:49浏览次数:71  
标签:归并 merge int ++ while && 排序 逆序


分治这一块确实是一个难点
因为涉及到递归,实际用起来比较难
而且能想到分治做法就不容易了
归并排序就是分治的典型应用
通过对数组不断拆分,然后再把小区间合并成有序的区间
思想就是如此,具体流程可以看​​​这篇博客​​​ 归并排序叫排序,确实可以是一个的稳定排序
但用处最多的还是用来求逆序对
就是在合并区间的时候利用单调性统计逆序对个数
我觉得​​这篇博客​​写的比较详细
放别人的就是方便

void merge(int a[], int l, int r) { //a就是需要排序/求逆序对的数组
if (l == r) return;
int m = (l + r) >> 1, i = l, j = m + 1, o = l;
merge(a, l, m); //先处理子问题
merge(a, m + 1, r);
while (i <= m && j <= r) //将小区间有序合并
if (a[i] > a[j]) tmp[o++] = a[j++], ans += m - i + 1; //ans统计逆序对,好好理解
//i后面到m的元素一定比a[j]大
else tmp[o++] = a[i++];
while (i <= m) tmp[o++] = a[i++];
while (j <= r) tmp[o++] = a[j++];
for (int i = l; i <= r; ++i) a[i] = tmp[i];
}


标签:归并,merge,int,++,while,&&,排序,逆序
From: https://blog.51cto.com/lyle/5794336

相关文章

  • 利用一个字符数组作函数参数,实现字符串(最大长度为80个字符 )的逆序存放。
    利用一个字符数组作函数参数,实现字符串(最大长度为80个字符)的逆序存放。要求如下:(1)在子函数Inverse中实现字符串的逆序存放。函数原型为:voidInverse(charstr[]);(2......
  • Madoka and Childish Pranks (贪心+逆序即可)
    题目大意: 给定一个01矩阵,其中0代表黑色,1代表白色Madoka要对一个同样大小的0矩阵染色,每次染色可以将一个矩形染成国际象棋的颜色(-1)^(x+y)的颜色(1白2黑)现......
  • 【Python】第3章-20 逆序的三位数
    程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。输入格式:每个测试是一个3位的正整数。......
  • python系列归并排序图文详解
    ​ 算法原理:      改归并排序将序列折半分成两个子序列,然后继续拆分,直到每个序列只有一个数据时,再将各个子序列排序后合并叠加。直到所有子序列都合并,排序完成。......
  • 2022下半年 Acwing 第二篇:归并模板
    归并其实和快排比较类似,所以模板的记忆也大差不差。不能省懒!voidmerge_sort(intq[],intl,intr){if(l>=r)return;intmid=l+r>>1;merge_s......
  • 归并排序
    defmergesort(seq):"""归并排序"""iflen(seq)<=1:returnseqmid=len(seq)/2#将列表分成更小的两个列表#分别对左右两个列表进行......
  • 归并排序
    voidquick_sort(intq[],intl,intr){if(l>=r)return;inti=l-1,j=r+1,x=q[l+r>>1];while(i<j){doi++;w......
  • 归并排序
    归并排序1.思路通过不断的划分区域,使其每个区域独自有序,为后续的合并埋下伏笔。由于两个区域是有序的,合并的时候就会降低排序的时间复杂度。2.代码2.1递归思想#inclu......
  • 【算法】时间频度与时间复杂度、归并排序、StringBuffer和StringBuilder详解!
    算法中的时间频度与时间复杂度时间频度一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度......
  • 2819. 动态逆序对
    题目链接2819.动态逆序对对于序列\(A\),它的逆序对数定义为满足\(i<j\),且\(A_i>A_j\)的数对\((i,j)\)的个数。给\(1\)到\(n\)的一个排列,按照某种顺序依次......