首页 > 其他分享 >你真的懂排序吗?

你真的懂排序吗?

时间:2023-11-01 21:57:04浏览次数:31  
标签:排序 leftarrow USACO18OPEN 冒泡排序 冒泡 Sorts 真的 逆序

冒泡排序交换次数就是逆序对个数,设每个位置的数字向前形成的逆序对是 \(c_i\),那么有序即 \(c_i=0\) 对每个 \(i\) 都成立,考虑冒泡中一次交换 \((i,i+1)(a_i>a_{i+1})\) 对 \(c\) 的影响,那么就是 \(c_i\leftarrow c_{i+1}-1,c_{i+1}\leftarrow c_i\),全局逆序对 \(-1\)。

[USACO18OPEN] Out of Sorts S

求数组最少经过多少轮冒泡后才能有序,这里冒泡是从前往后扫的。

考虑一轮冒泡是什么样子的:选一些数把它们往后移动到某个位置,其他的相对位置不变,并且移动的区域没有交,那么一个数被移动仅当 \(c_i=0\) 否则前面会有一个数覆过它,然后一个数从 \(i\) 移到 \(j\) 就使得 \(c_{i+1},c_{i+2},\cdots,c_j\) 前移一位并 \(-1\),所以 \(c_i\leftarrow\max\{c_{i+1}-1,0\}\),从宏观上来说就是所有 \(c_i\) 减少 \(1\),因此答案是 \(\max\{c_i\}\)。

[NOI Online #1 提高组] 冒泡排序

有了上一题的结论这个题水到爆,用树状数组维护所有 \(c_i\) 就可以了。

[USACO18OPEN] Out of Sorts G

[USACO18OPEN] Out of Sorts P

[JOI Open 2018] 冒泡排序 2

标签:排序,leftarrow,USACO18OPEN,冒泡排序,冒泡,Sorts,真的,逆序
From: https://www.cnblogs.com/yukari1735/p/17804213.html

相关文章

  • M3版MacBook Pro太空黑真的不沾指纹吗?PGSOFT游戏官方体验解答
    苹果发布了新一代的M3版14英寸和16英寸MacBookPro笔记本电脑,其中的一项引人注目的亮点是全新的太空黑配色。苹果声称,这新颜色采用了突破性的化学原理,能够形成阳极氧化密封,从而减少指纹的沾附,这让PG电子游戏玩家们都非常好奇,这个说法是否属实。此前,苹果在MacBookAir上推出了午.夜......
  • 软考真的要机考啦
    软考改革软考真的要机考啦2023年下半年计算机技术与软件专业技术资格(水平)考试有关工作调整的通告2023-08-14来源:中国计算机技术职业资格网为提升考试科学化、信息化水平,加强考试安全防控工作,确保考试公平、公正。自2023年下半年起,计算机软件资格考试的考试方式均由纸笔考试改革为......
  • 归并排序 Acwing 787
    归并排序最重要的一部便是归并,我们的模板顺序为:定义一个中间值,将我们的区间范围一分为二,我们将这两部分看成两个数组,我们分别将这两个数组进行归并排序,并且定义一个新的数组,将这两个数组排序好后导入到这个新数组中,并最后将这个定义的数组输出为原数组,即可实现归并排序。1......
  • 使用函数的选择法排序
    本题要求实现一个用选择法对整数数组进行简单排序的函数。函数接口定义:voidsort(inta[],intn);其中a是待排序的数组,n是数组a中元素的个数。该函数用选择法将数组a中的元素按升序排列,结果仍然在数组a中。裁判测试程序样例:#include<stdio.h>#defineMAXN10voids......
  • 归并排序统计逆序对的数量
    788.逆序对的数量-AcWing题库 昨天刚好做到这题,发现网上题解都讲的不是很详细,于是决定自己手写一篇。 归并排序能统计逆序对的数量 为什么归并排序能统计逆序对数量???归并排序的特点是,以mid,mid+1为分界,对两边分别进行排序借助递归的性质先将两边都从小到大排好序,之......
  • 【算法题】2826. 将三个组排序
    题目:给你一个下标从0开始长度为n的整数数组nums。从0到n-1的数字被分为编号从1到3的三个组,数字i属于组nums[i]。注意,有的组可能是空的。你可以执行以下操作任意次:选择数字x并改变它的组。更正式的,你可以将nums[x]改为数字1到3中的任意一个。你将按......
  • 复仇归并排序
     归并排序就是,把一群数据一直分,一直分,分到不能再分之后,一个个按顺序把你们装进去 讲讲第一个难点,上面两个mergesort归并,其实这是一个把人给分开,分成两组,接着再分,再分。。。分到没办法分的时候,往下走。。。然后接着就是定义指针ijk,然后就有一个困扰了我很久的问题,为什么可......
  • 排序算法——冒泡,插入,选择排序
    冒泡排序冒泡排序是一种简单的排序算法实际上是每一次排序都会将最大的元素放到最后比较相邻的元素,如果第一个比第二个大,就交换他们两个对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数针对所有的元素重复以上的步骤点击查看......
  • 快速排序学习
    //#include<bits/stdc++.h>#include<iostream>usingnamespacestd;voidquick_sort(intq[],intl,intr){if(l>=r)return;intx=q[(l+r)/2];inti=l-1,j=r+1;while(i<j){doi++;while(q[i]<x);doj--;while(q[j]>......
  • 排序(按照第一元素)
    按照元素的第一顺序排序//maybe贪心会用到structty{ intx,y;}a[N];boolcmp(tya,tyb){ if(a.x<b.x)returntrue; returnfalse;}intmain(){ intn; cin>>n; for(inti=1;i<=n;i++) { cin>>a[i].x>>a[i].y; } sort(a+......